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直接保存到稍后可以查看的文件中