User Tools

Site Tools


doc:appunti:prog:python_program_execution

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Last revisionBoth sides next revision
doc:appunti:prog:python_program_execution [2009/10/01 15:42] niccolodoc:appunti:prog:python_program_execution [2017/07/16 06:44] – [Run two commands in a pipe] niccolo
Line 17: Line 17:
 </code> </code>
  
-Same as above, but run in a subshell:+Same as above, but run in a subshell (in this case the command may contain shell redirections):
  
 <code python> <code python>
-retcode = call("mycmd myarg", shell=True)+retcode = subprocess.call("mycmd myarg", shell=True)
 </code> </code>
  
Line 31: Line 31:
 </code> </code>
  
-Get also the return code and iterate on the output:+Get also the return code, stderr and iterate on the output:
  
 <code python> <code python>
-subproc = subprocess.Popen(["mycmd", "myarg"], stdin=None, stdout=subprocess.PIPE) +subproc = subprocess.Popen(["mycmd", "myarg"], stdin=None, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
-output  = subproc.communicate()[0]+output, stderr = subproc.communicate()
 retcode = subproc.returncode retcode = subproc.returncode
 for line in output.splitlines(): for line in output.splitlines():
     print line     print line
 +</code>
 +
 +===== Redirect output to a file =====
 +
 +<code python>
 +file = open("/tmp/cmd_output", "w")
 +subprocess.call(["mycmd", "myarg"], stdout=file)
 +file.close()
 +</code>
 +
 +===== Run two commands in a pipe =====
 +
 +<code python>
 +cmd1 = ["oggdec", "-Q", "-o", "-", src]
 +cmd2 = ["lame", "--preset", "cd", "-", dst]
 +p1 = subprocess.Popen(cmd1, stdout=subprocess.PIPE)
 +p2 = subprocess.Popen(cmd2, stdin=p1.stdout, stdout=subprocess.PIPE)
 +p1.stdout.close()
 +output = p2.communicate()[0]
 +</code>
 +
 +===== Write to command standard input =====
 +
 +<code python>
 +cmd_input = []
 +cmd_input.append('line input one')
 +cmd_input.append('line input two')
 +
 +p = subprocess.Popen('command', stdin=subprocess.PIPE)
 +p.communicate(os.linesep.join(cmd_input))
 </code> </code>
  
doc/appunti/prog/python_program_execution.txt · Last modified: 2022/07/01 10:56 by niccolo