2014-11-05 58 views
1

我試圖運行和處理一些java程序的stdout,發現我的Python腳本一直在等待。然後我寫了一個新的測試腳本來測試subprocess,結果發現,再次我看不到輸出運行此時:子進程忽略bufsize參數

$ cat test.py 
#!/usr/bin/env python 

import subprocess 

c = ['/usr/bin/tail', '-f', '/var/log/dmesg'] 
proc = subprocess.Popen(c, 
            bufsize=1, 
            shell=False, 
            stdout=subprocess.PIPE, 
            stderr=subprocess.STDOUT) 

for line in proc.stdout: 
    print line 

爲什麼subprocess無視我的bufsize說法?是否有一些中間緩衝我缺少考慮?我期望讀取tail的前10行,然後永久等待,直到新行被添加到dmesg文件。我的用戶確實有權限,在bash上運行命令給出輸出。

tail更改爲yes似乎填充一些緩衝區,我可以看到很多輸出。

+1

在'iter(proc.stdout.readline,''):'work? – 2014-11-05 15:58:41

+0

@PadraicCunningham是的!謝謝,發佈它作爲答案:) – vz0 2014-11-05 16:00:58

回答

1

您可以使用iter(proc.stdout.readline,'')

for line in iter(proc.stdout.readline,''): 
    print line 

for line in proc.stdout遍歷內容之前讀取所有的輸入。