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)
这个脚本卡住了,甚至我就算往系统日志里加点东西,它也不写任何内容。
这是为什么呢?
2 个回答
2
你也可以直接在Python里模拟一下 tail -f
的功能。
看看这个链接: 在Python中实现tail -f(Python示例)
或者这个: 模拟"tail -f"命令,或者在谷歌上搜索更多的例子。
5
readlines() 这个函数会一直等到文件结束(eof)才会返回结果,但因为 tail 这个命令不会自己结束,所以它不会有文件结束的情况。
你可以把你的循环改成这样:
while True:
print(p.stdout.readline())
除非你想在每行之间多等1秒,否则其实不需要加 sleep,因为 readline 会一直等着,直到有完整的一行数据可用,这样会用很少的资源。