2011-04-21 62 views
2

有了這個代碼Python的子讀書

p = subprocess.Popen('tail -f /var/log/syslog', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) 

for line in p.stdout.readlines(): 
    print line, 
    time.sleep(1) 

腳本掛起,如果我補充一下到syslog不寫任何線連。

爲什麼?

+0

我一定要在另一個線程運行POPEN? – Mejmo 2011-04-21 14:32:53

回答

5

readlines方法()將不會返回,直到有上的過程中,其不會有作爲尾從未完成而不中斷的EOF。

您可以將您的循環改爲:

while True: 
    print(p.stdout.readline()) 

除非你想在每行之間的額外的1秒的差距,就沒有必要爲的ReadLine將阻止,使用最少的資源,直到有一個睡眠全線可用。