read stdout/stderr without blocking

Discussion in 'Python' started by =?ISO-8859-2?Q?Jacek_Pop=B3awski?=, Sep 12, 2005.

  1. Popen from subprocess module gives me access to stdout, so I can read
    it. Problem is, that I don't know how much data is available... How can
    I read it without blocking my program?

    example:
    --------------------------------------------------------------------
    import subprocess
    import time

    command="ls -l -R /"

    p=subprocess.Popen(command,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)

    while (p.poll()==None):
    print "."
    r=p.stdout.read()
    --------------------------------------------------------------------

    when you comment out read() - you will notice that loop is working, with
    read() loop is blocked
    Of course I don't need to read() inside loop, but... if output is very
    long (like from "make") and I don't read from stdout - command will
    block itself! I tried to increase bufsize, but it didn't help.

    Is there a way to read only available data from stdout/stderr?
    Is there a way to not block Popen command without reading stdout/stderr?
     
    =?ISO-8859-2?Q?Jacek_Pop=B3awski?=, Sep 12, 2005
    #1
    1. Advertising

  2. Only solution which works for now is to redirect stderr to stdout, and
    read stdout on thread.
    Code without thread or with read() or read(n) (when n>1) can block.
    Code with select() and read(1) works, but it is very slow.
     
    =?ISO-8859-2?Q?Jacek_Pop=B3awski?=, Sep 13, 2005
    #2
    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. Adriaan Renting

    Re: read stdout/stderr without blocking

    Adriaan Renting, Sep 12, 2005, in forum: Python
    Replies:
    1
    Views:
    340
    =?UTF-8?B?SmFjZWsgUG9wxYJhd3NraQ==?=
    Sep 12, 2005
  2. Adriaan Renting

    Re: read stdout/stderr without blocking

    Adriaan Renting, Sep 12, 2005, in forum: Python
    Replies:
    10
    Views:
    691
    =?ISO-8859-2?Q?Jacek_Pop=B3awski?=
    Sep 16, 2005
  3. Adriaan Renting

    Re: read stdout/stderr without blocking

    Adriaan Renting, Sep 14, 2005, in forum: Python
    Replies:
    0
    Views:
    430
    Adriaan Renting
    Sep 14, 2005
  4. Adriaan Renting

    Re: read stdout/stderr without blocking

    Adriaan Renting, Sep 16, 2005, in forum: Python
    Replies:
    0
    Views:
    386
    Adriaan Renting
    Sep 16, 2005
  5. George C. Demetros

    BLOCKING and STDOUT/STDERR

    George C. Demetros, Jan 6, 2004, in forum: Perl Misc
    Replies:
    1
    Views:
    102
    Ben Morrow
    Jan 6, 2004
Loading...

Share This Page