Python子进程读取

时间:2011-04-21 14:28:05

标签: python subprocess

拥有此代码

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添加内容,脚本也会挂起并且不会写任何行。

为什么?

2 个答案:

答案 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以获取更多示例。