Python 从设置了超时的子流程捕获输出

Python 从设置了超时的子流程捕获输出,python,python-3.x,subprocess,Python,Python 3.x,Subprocess,我正在使用subprocess.run运行命令并捕获输出,如下所示: proc = subprocess.run([commandAndFlags], capture_output=True) if proc.stdout: print('stdout:', str(proc.stdout)) if proc.stderr: print('stderr:', str(proc.stderr)) 我想添加一个超时,但仍然在超时关闭之前捕获发送到stdout/stderr的任何输

我正在使用
subprocess.run
运行命令并捕获输出,如下所示:

proc = subprocess.run([commandAndFlags], capture_output=True)

if proc.stdout:
    print('stdout:', str(proc.stdout))
if proc.stderr:
    print('stderr:', str(proc.stderr))
我想添加一个超时,但仍然在超时关闭之前捕获发送到stdout/stderr的任何输出

但是,如果简单地添加超时并将其包装为try/except,则无法捕获子流程输出

try:
    proc = subprocess.run([commandAndFlags], capture_output=True, timeout=2000)
except subprocess.TimeoutExpired:
    print('Timeout!!')

if proc.stdout:
    print('stdout:', str(proc.stdout))
if proc.stderr:
    print('stderr:', str(proc.stderr))
现在,当我尝试打印stdout/stderr时,没有定义
proc


如何设置超时,但仍能捕获超时之前打印的任何输出?

最终我发现可以将文件直接传递到
子进程。运行

outfile = 'outfile.txt'
errfile = 'errfile.txt'
try:
  proc = subprocess.run([commandAndFlags], timeout=2000
                        stdout=open(outfile, 'w'), stderr=open(errfile, 'w'))
except subprocess.TimeoutExpired:
    print('Timeout!!')

# check if outfile/errfile files exist and print contents
无论子进程是否因超时而停止,子进程都会将stdout/stderr直接保存到稍后可以查看的文件中