能够使用以下方法实时读取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
但是当我尝试同时实时读取stdout
和stderr
时,它无法按预期工作,并且仅在子流程执行完成时才将数据打印在控制台上。
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