处理完成后,Popen输出总是以字节数组的形式立即到达,我尝试了几种配置,包括对stdout使用文件。
为了创建进度条,我想一个接一个地接收输出。在这个例子中,只有一个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()
发布于 2020-12-22 19:44:16
您可以指定read()将读取的字节数。如果您在code.py中使用p.stdout.read(1),您的代码将按您所希望的那样工作。请注意,code.py的打印函数在shell.py的输出中添加了换行符,因此python将打印以下内容:
output: b'1'
output: b'\n'
output: b'1'
output: b'\n'
output: b'1'
output: b'\n'
值得一提的是,这将读取字节。如果您想要一个接一个地处理unicode字符,则必须自己进行一些处理。
https://stackoverflow.com/questions/65407598
复制相似问题