Having trouble converting popen2 to subprocess

D

Daniel Klein

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
 
T

tom

Daniel said:
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.
 
F

Fredrik Lundh

Daniel said:
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

p.stdin is the *other* process' stdin. if you want to read things it
prints, read from p.stdout instead.
print fin.readline()
fin.close()

</F>
 
D

Daniel Klein

Thanks /F, that was it.

Dan

On Sat, 18 Nov 2006 15:03:30 +0100, Fredrik Lundh

[snip]
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,995
Messages
2,570,225
Members
46,815
Latest member
treekmostly22

Latest Threads

Top