【发布时间】:2021-04-01 02:12:38
【问题描述】:
处理完成后,Popen 输出总是以字节数组的形式立即到达,我尝试了几种配置,包括使用标准输出文件。
要创建进度条,我想一一接收输出。在此示例中,只有一个 p.stdout.read() 将所有 1 作为字节数组返回。
# shell.py
import sys, time
for _ in range(5):
print(1)
time.sleep(0.5)
sys.stdout.flush()
# code.py
from subprocess import Popen, PIPE
p = Popen(['python', 'shell.py'],
stdin = PIPE, stdout = PIPE, stderr = PIPE, shell = False, bufsize=1)
output = p.stdout.read()
while output:
print('output:', output)
output = p.stdout.read()
【问题讨论】:
-
很想知道这是如何工作的。我还尝试将出于相同目的的标准输出发送到文件,然后只是
cating 文件以查看会发生什么。似乎 stdout 没有流式传输到文件,而仅在进程完成时才转储,并且传递 BytesIO 或 StringIO 对象似乎给出了错误
标签: python subprocess popen