Python Popen().stdout.read() hang

前端 未结 3 1284
陌清茗
陌清茗 2021-02-07 16:22

I\'m trying to get output of another script, using Python\'s subprocess.Popen like follows

process = Popen(command, stdout=PIPE, shell=True)
exitc         


        
相关标签:
3条回答
  • 2021-02-07 16:48

    You probably want to use .communicate() rather than .wait() plus .read(). Note the warning about wait() on the subprocess documentation page:

    Warning This will deadlock when using stdout=PIPE and/or stderr=PIPE and the child process generates enough output to a pipe such that it blocks waiting for the OS pipe buffer to accept more data. Use communicate() to avoid that.

    http://docs.python.org/2/library/subprocess.html#subprocess.Popen.wait

    0 讨论(0)
  • 2021-02-07 16:51

    You can see how to deal with hanging reading of stdout/stderr in the next sources:

    readingproc

    0 讨论(0)
  • 2021-02-07 16:54

    read() waits for EOF before returning.

    You can:

    • wait for the subprocess to die, then read() will return.
    • use readline() if your output is broken into lines (will still hang if no output lines).
    • use os.read(F,N) which returns at most N bytes from F, but will still block if the pipe is empty (unless O_NONBLOCK is set on the fd).
    0 讨论(0)
提交回复
热议问题