有这个代码
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,因为没有中断,tail 永远不会完成。
您可以将循环更改为:
while True:
print(p.stdout.readline())
除非您希望每行之间有额外的 1s 间隔,否则不需要 sleep ,因为 readline 将阻塞,使用最少的资源,直到有完整的行可用。
关于Python 子进程读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5745471/