[Tutor] How to run a system application and get the stdout in Python?

Danny Yoo dyoo at hkn.eecs.berkeley.edu
Mon Nov 17 01:10:45 EST 2003



On Sun, 16 Nov 2003, Scott Chapman wrote:

> I want to run a system application on my web server (using Draco) and
> send the stdout of the system command (htmldoc) to the client's web
> browser.
>
> I see a number of os module possibilities to run system commands.
> Here's what I'm trying to run:
>
> /usr/bin/htmldoc -t pdf --webpage
> 'http://127.0.0.1/draco/wiki.dsp/Lund?cmd=View&page=FrontPage&PDF=True'
>
> What's the best way to run this and how do I grab the stdout of the
> command?

Hi Scott,

(It's sorta funny how simliar questions come in streaks.  *grin*)


You'll want to look at os.popen(): it'll let you execute an external
command and grab its output as if it were a file-like object.  For
example:

###
>>> import os
>>> os.popen("ls src/python")
<open file 'ls src/python', mode 'r' at 0x60320>
>>> f = os.popen("ls src/python")
>>> f.readline()
'block_sorting.py\n'
>>> f.readline()
'block_sorting.py~\n'
###


There's another function called os.system() that does something similar:
it also executes external commands, but its return value is the
"errorlevel" of the command, and not its stdout.

If you're looking for more fine-grained control, there a module called
'popen2' that has more powerful process-opening functions:

    http://www.python.org/doc/lib/module-popen2.html


but I think that, for the moment, os.popen() should do the trick.


Good luck to you!




More information about the Tutor mailing list