1. 程式人生 > >Python subprocess.Popen 實時輸出 stdout

Python subprocess.Popen 實時輸出 stdout

大部分的程式是這樣的:

from subprocess import Popen, PIPE, STDOUT

p = Popen(cmd, stdout=PIPE, stderr=STDOUT, shell=True)
while True:
    print(p.stdout.readline())
    if not line: 
        break

但是由於子程式沒有進行 flush 的話,會把結果快取到系統中。導致程式執行完成,上面的程式才會進行打出(會一直卡在readline這個函式)。

解決方法:

p = subprocess.Popen(cmd, stdout=subprocess.PIPE, bufsize=1)
for line in iter(p.stdout.readline, b''):
    print line,
p.stdout.close()
p.wait()