Having trouble converting popen2 to subprocess

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Daniel Klein

    #1

    Having trouble converting popen2 to subprocess

    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_newli nes=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
  • tom

    #2
    Re: Having trouble converting popen2 to subprocess

    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_newli nes=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.

    Comment

    • Fredrik Lundh

      #3
      Re: Having trouble converting popen2 to subprocess

      Daniel Klein wrote:
      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_newli nes=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>

      Comment

      • Daniel Klein

        #4
        Re: Having trouble converting popen2 to subprocess


        Thanks /F, that was it.

        Dan

        On Sat, 18 Nov 2006 15:03:30 +0100, Fredrik Lundh
        <fredrik@python ware.comwrote:

        [snip]
        >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>

        Comment

        Working...