如何在孩子还活着的时候阅读它的内容

时间:2017-09-11 15:18:11

标签: python subprocess stdout popen psutil

我创建了两个脚本,当其中一个脚本执行另一个脚本并尝试实时接收它时。

尝试获取输出的脚本:

import subprocess
p = subprocess.Popen("python .\\print.py", stdout=subprocess.PIPE)
print p.stdout.readline()

第二个脚本:

import time
print "1se12d12d32d3223"
print "\r"
time.sleep(10000)

问题是我只在子进程终止时获取输出,即使该行已经写入stdout。

我尝试了以下内容:

  • 使用os.pipe作为Popen的参数,然后阅读"阅读"管
  • 使用shell = True作为Popen参数
  • 使用bufsize = 1作为Popen参数
  • 使用stdout.read(),stdout.readlines(),stdout.read(1)等......
  • 我不能使用fcntl模块制作管道"不阻塞",因为我使用Windows

我尝试做的所有事情都是在进程仍处于活动状态时读取子进程的第一行stdout。我怎么能在python中做到这一点?

1 个答案:

答案 0 :(得分:0)

默认情况下,Python缓冲其输出。在某些情况下,输出会自动刷新。例如。当您在终端中运行第二个脚本时,您将立即看到输出。

您可以在sys.stdout.flush()来电之前插入sleep()来明确刷新输出。