Getting output from executed command that is not STDIN

Fredrik Lundh fredrik at pythonware.com
Thu Aug 7 14:16:04 CEST 2003


Sami Viitanen wrote:

> I'm using os.popen and read for reading command input to string but the
> string doesn't contain the same output that running the command manually or
> with os.system contains.
>
> with os.system:
> cvs server: Diffing //Project1
> File //Project1/testiware.txt is new; current revision 3.13
> File //Project1/what_is_version_control.txt is new; current revision 3.3
> cvs server: Diffing //Project1/Dir1
> File //Project1/Dir1/seltest.c is new; current revision 1.4
> File //Project1/Dir1/testi.c is new; current revision 1.2
>
> with os.popen and read:
> File //Project1/testiware.txt is new; current revision 3.13
> File //Project1/what_is_version_control.txt is new; current revision 3.3
> File //Project1/Dir1/seltest.c is new; current revision 1.4
> File //Project1/Dir1/testi.c is new; current revision 1.2
>
> ---
> Script doesn't read those "cvs server: Diffing" lines
> ---

looks like the program prints some output to stderr, and some to stdout.
possible solutions:

1) if your shell supports it, add "2>&1" to the end of the command line,
    to send all stderr output to stdout.  random google link:
    http://www.zeitfenster.de/bash/Bash-Prog-Intro-HOWTO-3.html

2) use os.popen4 to get a file handle representing both streams.  see:
    http://www.python.org/doc/current/lib/os-newstreams.html#os-newstreams

</F>

<!-- (the eff-bot guide to) the python standard library (redux):
http://effbot.org/zone/librarybook-index.htm
-->








More information about the Python-list mailing list