Having trouble converting popen2 to subprocess

tom tom at t0mb.net
Sat Nov 18 08:58:51 EST 2006


Daniel Klein wrote:
> Here's a c routine that prints a single line :
>
> #include <stdio.h>
> main()
> {
>   printf ("Hello World!\n");
> }
>
> And now the Python program (called 'po.py') that uses 'popen2' :
>
> import popen2
> (fin, fout) = popen2.popen2(r'c:\home\hw.exe', -1, 't')
> print fin.readline()
> fin.close()
> fout.close()
>
> When this is run it properly outputs the one line from the c routine :
>
> C:\>python c:\python\po.py
> Hello World!
>
> Now here is my attempt to use the 'subprocess' module :
>
> from subprocess import *
> p = Popen(r'c:\home\hw.exe', bufsize=-1, stdin=PIPE, stdout=PIPE,
> universal_newlines=True)
> fin = p.stdin
> print fin.readline()
> fin.close()
>
> When this is run, I get no output :
>
> C:\>python c:\python\sp.py
>
>
> C:\>
>
> As you can see, I get no exception.
>
> I've tried various combinations of the Popen arguments with no joy.
>
> The platform is Windows XP Pro, so I did not try things like
> 'close_fds'.
>
> What am I missing ?
>
> Daniel Klein
>   
subprocess will actually execute as a subprocess, so you have to wait 
for the command to finish before you look at the stdout.  Advantages of 
this being that you can interfere with stdin/out whilst the program is 
running.  I believe .wait will be what you want, although i haven't look 
at the docstring, so double check.



More information about the Python-list mailing list