command.getoutput()
Trent Mick
trentm at ActiveState.com
Thu Feb 27 12:06:19 EST 2003
[Peter Wu wrote]
> I'm new to Python. Can you pls show me the code to execute a Win32 command
> in Python? Thanks.
1. Just launching a program where stdout and stderr just get redirected
to the console:
>>> retval = os.system("echo hi")
hi
>>> retval
0
2. When you want to capture stdout:
>>> stdout = os.popen("echo hi")
>>> output = stdout.read()
>>> retval = stdout.close()
>>> output
'hi\n'
>>> retval
3. When you want to send something in via stdin:
>>> stdin, stdout = os.popen2("cat")
>>> stdin.write("foo\nbar\n")
>>> stdin.close()
>>> output = stdout.read()
>>> retval = stdout.close()
>>> output
'foo\nbar\n'
>>> retval
4. When you want to capture stderr too:
>>> stdin, stdout, stderr = os.popen3("echo hi 1>&2")
>>> stdin.close()
>>> output = stdout.read()
>>> stdout.close()
>>> error = stderr.read()
>>> retval = stderr.close() # the last handle you close returns retval
>>> output
''
>>> error
'hi \n'
>>> retval
5. There is also os.popen4 to get stdout and stderr on the same pipe.
6. When you want to start doing fancy things like controlling what pipes
get passed to the spawned process, controlling whether a console is
created, controlling process groups, killing processes, etc. then you
usually have to fallback to using the Win32 APIs for processes (see
CreateProcess on MSDN). These APIs are mostly available via Mark
Hammand's PyWin32 extensions (which you already have if you installed
ActivePython).
Cheers,
Trent
--
Trent Mick
TrentM at ActiveState.com
More information about the Python-list
mailing list