Centos下subprocess.Popen无法实时获取子进程结果,windows可以

Centos版本:7.3 , Python版本: 3.6.7

代码如下

p = subprocess.Popen(['/usr/bin/python3.6','test2.py'],stdout=subprocess.PIPE)
for line in p.stdout:
    print(line.decode("utf-8"))
    
    

----------
#test2.py

import time
for x in range(5):
    print(x)
    time.sleep(1)

在windows下可以正常实时读取,centos下则会一起读取后,直接返回最终结果。

尝试过以下方式1:

while True:
    buff = p.stdout.readline()
    if buff == '' and p.poll() != None:
        break
    else:
        print(buff)

方式2:

print(p.communicate()[0]) 

均无效,请求各位大佬帮助,也可以测试一下是否问题有重现。

阅读 3.6k
2 个回答

搞定了,加个-u参数即可

    p = subprocess.Popen(['/usr/bin/python3.6','-u','test2.py'],stdout=subprocess.PIPE)
    for line in p.stdout:
        print(line.decode("utf-8"))

看样子你找到原因了,因为 test.py 的 print 有 buffer
也可以修改 test.py
print(x, flush=True)

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题