我试图运行并处理某些java程序的stdout,发现我的Python脚本一直在等待。然后我写了一个新的测试脚本来测试subprocess
并再次发现我在运行时看不到输出:
$ cat test.py
#!/usr/bin/env python
import subprocess
c = ['/usr/bin/tail', '-f', '/var/log/dmesg']
proc = subprocess.Popen(c,
bufsize=1,
shell=False,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT)
for line in proc.stdout:
print line
为什么subprocess
会忽略我的bufsize
参数?我是否缺少一些中间缓冲来考虑?我希望读取tail
的前10行,然后永远等待,直到将新行添加到dmesg
文件。我的用户确实拥有权限,在bash
上运行命令会输出。
将tail
更改为yes
似乎填充了一些缓冲区,我可以看到很多输出。
答案 0 :(得分:1)
您可以使用iter(proc.stdout.readline,'')
:
for line in iter(proc.stdout.readline,''):
print line
for line in proc.stdout
在迭代内容之前读取所有输入。