subprocess忽略bufsize参数

时间:2014-11-05 15:46:47

标签: python python-2.6

我试图运行并处理某些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似乎填充了一些缓冲区,我可以看到很多输出。

1 个答案:

答案 0 :(得分:1)

您可以使用iter(proc.stdout.readline,'')

for line in iter(proc.stdout.readline,''):
   print line

for line in proc.stdout在迭代内容之前读取所有输入。