2010-11-15 42 views
2

這個問題是相對於:Python的子過程產生的輸出或不

python, subprocess: reading output from subprocess

如果P是一個子流程開始連同命令的

import subprocess 

P = subprocess.Popen ("command", stdout=subprocess.PIPE) 

我們可以讀取該輸出的線P由P.stdout.readline()產生。儘管這是一個阻塞閱讀。我怎樣才能檢查是否有輸出準備好閱讀(沒有阻止)?

+0

的可能重複[在python的流中讀取非阻塞。](http://stackoverflow.com/questions/375427/non-blocking-read-on-a-stream-in-python) – katrielalex 2010-11-15 22:46:14

回答

0

如果使用的是* nix中,那麼你可以使用select模塊輪詢標準輸出文件描述符

import subprocess 
import select 
poller = select.epoll() 

P = subprocess.Popen ("command", stdout=subprocess.PIPE) 
poller.register(P.stdout, select.EPOLLHUP) 

while True: 
    #block indefinitely: timeout = -1 
    #return immediately: timeout = 0 
    for fd, flags in poller.poll(timeout=0) 
     foo = P.stdout.readline() 
    #do something else before the next poll