这是针对 Windows 环境的。
编译 testprocess.py(使用 pyinstaller)并将生成的 exe 放在测试文件夹中。
在同一文件夹中,运行 ptest.py。
Testprocess.py 开始并且永远不会结束,每 3 秒向标准输出写入一个数字。
ptest.py 尝试捕获此输出。
此代码模拟了我想解决的生产问题。与生产中发生的情况类似,在 testprocess 终止之前,stdout 不会发布到 ptest.py。在生产中,这个过程永远不会停止,但它会将重要内容发布到标准输出。
有没有办法做到这一点?
只要子进程终止,附加的代码就可以正常工作。
## [testprocess.py]:
import time
x = 0
while True:
print(x)
time.sleep(3)
x += 1
## [ptest.py]:
import os
import sys
import subprocess
def get_script_path():
return os.path.dirname(os.path.realpath(sys.argv[0]))
start_dir = get_script_path()
cmd = [start_dir + os.sep + 'testprocess.exe']
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, encoding='utf-8', universal_newlines=True)
print('Subprocess started.')
capture = ""
s = proc.stdout.read(1)
print('Read Stdout')
while len(s) > 0:
sys.stdout.write(s)
sys.stdout.flush()
capture += s
s = proc.stdout.read(1)
print(s)
print(capture)
sys.exit()
希望能够在子进程仍在运行时捕获它的标准输出,而不是等到它终止。