拥有此代码
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 :(得分:5)
readlines()将不会返回,直到进程上有一个eof,如果没有中断,尾部永远不会完成。
您可以将循环更改为:
while True:
print(p.stdout.readline())
除非你想在每一行之间增加1s间隔,否则不需要睡眠,因为readline将使用最少的资源阻塞,直到有一个完整的可用行。
答案 1 :(得分:2)
您也可以直接在python中模拟tail -f
。
请检查:tail -f in Python (Python recipe)
或者:Emulate the "tail -f" command或Google以获取更多示例。