有了這個代碼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不寫任何線連。
爲什麼?
有了這個代碼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不寫任何線連。
爲什麼?
readlines方法()將不會返回,直到有上的過程中,其不會有作爲尾從未完成而不中斷的EOF。
您可以將您的循環改爲:
while True:
print(p.stdout.readline())
除非你想在每行之間的額外的1秒的差距,就沒有必要爲的ReadLine將阻止,使用最少的資源,直到有一個睡眠全線可用。
您也可以在蟒蛇直接模仿tail -f
。
檢查:tail -f in Python (Python recipe)
或者這樣:Emulate the "tail -f" command或谷歌更多的例子。
我一定要在另一個線程運行POPEN? – Mejmo 2011-04-21 14:32:53