您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

捕获子流程输出

捕获子流程输出

communication()阻塞直到子进程返回,所以循环中的其余各行仅在子进程完成运行 才能执行。从stderr读取也将阻止,除非您像这样逐个字符地读取:

import subprocess
import sys
child = subprocess.Popen(command, shell=True, stderr=subprocess.PIPE)
while True:
    out = child.stderr.read(1)
    if out == '' and child.poll() != None:
        break
    if out != '':
        sys.stdout.write(out)
        sys.stdout.flush()

这将为您提供实时输出。取自Nadia在这里的答案。

您显然可以使用subprocess.communicate,但我认为您正在寻找实时输入和输出

readline被阻止,因为该过程可能正在等待您的输入。您可以逐个字符地阅读以克服此问题,如下所示:

import subprocess
import sys

process = subprocess.Popen(
    cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE
)

while True:
    out = process.stdout.read(1)
    if out == '' and process.poll() != None:
        break
    if out != '':
        sys.stdout.write(out)
        sys.stdout.flush()
其他 2022/1/1 18:35:13 有411人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶