Re: IPC

Discussion in 'Python' started by Guest, Jul 27, 2004.

  1. Guest

    Guest Guest

    Yannick,
    There's two modules that I like to use for this kind of stuff:
    http://starship.python.net/crew/tmick/ (process.py)
    http://www.lysator.liu.se/~astrand/popen5/ (also process.py
    just to be confusing)

    Hopefully one of these will make it into the standard library.
    I honestly like them both and combine parts from both when I
    need to create my own classes.

    The reason your program hangs is because .readlines() will
    keep reading untill an EOF(ie: program exits) is reached and
    since the pipe is still open it never will be. (The example
    given in the popen2 module,
    http://docs.python.org/lib/popen2-flow-control.html, eludes to
    this but never actually says it.)

    I recently did a quick hack using select and popen2, but I
    doubt it's fast or even safe, but it works.

    #yadda yadda
    r, w, e = popen2.popen3(cmd)
    cmd = "?\n"
    w.write(cmd)
    w.flush()
    #continuely test for output to read
    while select.select([e],[],[],1)[0]:#timeout guessing game
    line=e.readline()
    #do something with line
    while select.select([r],[],[],1)[0]:#timeout guessing game
    line=r.readline()
    #do something with line

    If you're output is line buffered you probably shouldn't have
    many problems with this approach if you can be assured your
    program will respond within the 1 second alloted to it. If
    you're positive you'll get output, just remove the timeout.

    Hope this helps.

    -Brian



    ---- Original message ----
    >Date: Tue, 27 Jul 2004 14:20:19 -0400
    >From: "Yannick Turgeon" <>
    >Subject: Re: IPC
    >To:
    >
    >Larry,
    >
    >As I said, I use FTP only to test the IPC and give here a

    known example.
    >It's in fact with a custom program that I have to communicate.
    >
    >Any help in this regard?
    >
    >Yannick
    >
    >"Larry Bates" <> wrote in message
    >news:...
    >> Python has built in support for ftp (see ftplib)
    >> use it instead of trying to "communicate" with
    >> external FTP program.
    >>
    >> http://www.python.org/doc/current/lib/module-ftplib.html
    >>
    >> You can catch any exceptions (like failure to connect)
    >> by using python try:/except: blocks.
    >>
    >> HTH,
    >> Larry Bates
    >> Syscon, Inc.
    >>
    >> "Yannick Turgeon" <> wrote in message
    >> news:Z6wNc.21572$...
    >> > Hi,
    >> >
    >> > I'm relatively new to Python. I'm using 2.3.4 on W2K.
    >> >
    >> > What I want to do is to start a program and interact with

    it. Say my
    >> program
    >> > is FTP, I want to start FTP then send the commande "open

    x.x.x.x" then
    >> look
    >> > for the answer (if the connection is opened or not), then

    do something
    >> > dependant of the success or error.
    >> >
    >> > I tried with popen3. The problem I got with this: it

    seems that I have
    >to
    >> > end the program before being able to read the output. Or

    maybe I'm not
    >> using
    >> > it correctly. I do test the communication with FTP exec.

    but it will be
    >a
    >> > custom program in real. Here is my code:
    >> >
    >> >
    >> > def test(self):
    >> > cmd = "ftp"
    >> > r, w, e = popen2.popen3(cmd)
    >> >
    >> > cmd = "?\n" # A simple FTP commande
    >> > w.write(cmd)
    >> > w.flush()
    >> >
    >> > # That is what I would like but it's hanging

    here. I have to
    >> remove
    >> > this group and read at the end.
    >> > for line in e.readlines():
    >> > # Do something conditionnal to the result of

    "line"
    >> > pass
    >> > for line in r.readlines():
    >> > # Do something conditionnal to the result of

    "line"
    >> > pass
    >> >
    >> >
    >> > cmd = "quit\n"
    >> > w.write(cmd)
    >> > w.flush()
    >> >
    >> > for line in e.readlines():
    >> > print line
    >> > for line in r.readlines():
    >> > print line
    >> >
    >> > w.close()
    >> > r.close()
    >> > e.close()
    >> > ----------------------
    >> >
    >> > Anybody can help? Thanks for your time.
    >> >
    >> > Yannick
    >> >
    >> >

    >>
    >>

    >
    >
    >--
    >http://mail.python.org/mailman/listinfo/python-list
    Guest, Jul 27, 2004
    #1
    1. Advertising

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

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. piyush
    Replies:
    0
    Views:
    1,834
    piyush
    Jul 14, 2004
  2. gary
    Replies:
    3
    Views:
    530
    Steve Grazzini
    Sep 18, 2003
  3. Brian Hann

    IPC::Run and hanging pipes

    Brian Hann, Dec 8, 2003, in forum: Perl
    Replies:
    1
    Views:
    762
    Brian Hann
    Dec 11, 2003
  4. Antonio
    Replies:
    0
    Views:
    644
    Antonio
    May 17, 2004
  5. Dave Newberry
    Replies:
    0
    Views:
    639
    Dave Newberry
    Oct 17, 2004
Loading...

Share This Page