Python:如何每次获得子进程的输出';s输出而不是终止?

Python:如何每次获得子进程的输出';s输出而不是终止?,python,multithreading,subprocess,python-multithreading,Python,Multithreading,Subprocess,Python Multithreading,我有两个脚本。 (代码如下所列)。第一个脚本只是延迟打印数字 第二个脚本应该作为子进程启动第一个脚本,然后在后台(!)检查第一个脚本是否输出了一个数字,如果是,则打印它 但我得到的是,当第一个脚本终止时(20秒后),第二个脚本一次打印所有数字,而不是每时每刻打印一个数字。 输出如下所示: START 0 1 2 3 4 5 6 7 8 9 16:05:51 OVER 但我所期望的是: START 0 16:05:51 1 16:05:53 2 16:05:55 3 16:05:57 4 16:

我有两个脚本。 (代码如下所列)。第一个脚本只是延迟打印数字

第二个脚本应该作为子进程启动第一个脚本,然后在后台(!)检查第一个脚本是否输出了一个数字,如果是,则打印它

但我得到的是,当第一个脚本终止时(20秒后),第二个脚本一次打印所有数字,而不是每时每刻打印一个数字。 输出如下所示:

START
0
1
2
3
4
5
6
7
8
9
16:05:51
OVER
但我所期望的是:

START
0
16:05:51
1
16:05:53
2
16:05:55
3
16:05:57
4
16:05:59
5
16:06:01
6
16:06:03
7
16:06:05
8
16:06:07
9
16:06:09
OVER
我怎样才能解决这个问题

代码:

1.2: test.py: 试着打电话

sys.stdout.flush()
每次打印后

您基本上是在向缓冲区中写入数据,在写入过程完成之前,这些写入不会被“刷新”!因此,如果您不想等到python解释器(或下面的操作系统)决定“刷新时间到了”。。。您必须“手动”执行该步骤

更多背景信息,请参见另一个


编辑:正如您所说,这不适用于流:可能您必须使用其他方式来调用第二个脚本。您可以尝试改用该模块。那一个存在的“唯一”目的是与标准输出“交互”

不工作。似乎是
stream.communicate()[0]
在等待子进程终止。因此,
print(out,strftime(“%H:%M:%S”)
不会执行。循环
stream.stdout
而不是在此过程中使用
communicate()
case@mata也不行。它等待第一个脚本完成,然后立即输出。您还应该检查第一个脚本中是否定期刷新输出。@mata我已经这样做了。每次打印后冲洗。通过在Popen对象的参数中设置
bufsize=1
,并在
-u
模式下运行NUNG脚本,问题得以解决。谢谢大家!
from subprocess import Popen, PIPE, STDOUT
from time import strftime
import threading, sys

stream = Popen(['python', '1.py'], stdout=PIPE, stderr=STDOUT)
def a():
        while True:
            try:
                out = stream.communicate()[0].decode("utf-8")
                print(out, strftime("%H:%M:%S"))
                sys.stdout.flush()
            except ValueError:
                print('OVER')
                break
            except:
                raise
t = threading.Thread(target=a,)
t.start()
print('START')
sys.stdout.flush()