无法使用python子进程获取实时stdout和stderr

时间:2019-01-04 10:11:39

标签: python subprocess

能够使用以下方法实时读取python子进程stdout,

import subprocess
command = "/tmp/testscript"
proc = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)
while True:
    output = proc.stdout.readline()
    print(output)
    if output.decode() == '' and proc.poll() is not None:
        break

但是当我尝试同时实时读取stdoutstderr时,它无法按预期工作,并且仅在子流程执行完成时才将数据打印在控制台上。

import subprocess
command = "/tmp/test.sh"
proc = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)
while True:
    output = proc.stdout.readline()
    error = proc.stderr.readline()
    print(output)
    print(error)
    if output.decode() == '' and proc.poll() is not None:
        break

据我所知,虽然它只是先读取stdout的行,然后读取stderr,然后打印两个变量值并转到下一个循环,但不确定为什么它不能按预期工作。任何想法都会有所帮助。

注意:我正在使用python3.7

0 个答案:

没有答案