我不知道如何使用 python 的 subprocess.run 来捕获 stdout、stderr 和 exitcode ...以及其他可以捕获的内容。我还必须使用超时选项,因为我正在运行的数千个命令中的一些命令挂起,即无休止地运行。我敢打赌我错过了一些明显的事情,我很抱歉。我花了好几天的时间来解决这个问题,但无法弄清楚。
如果您能给我任何帮助,我将不胜感激。
这是我的有缺陷的代码:
seconds = timeout
try:
proc = subprocess.run(cmd, capture_output=True, timeout=seconds)
except subprocess.TimeoutExpired:
print('This process ran too long:\n' + cmd + '\n')
out, err = proc.communicate()
exitcode = proc.returncode
if len(out) == 0: out="''"
if len(err) == 0: err="''"
#
return exitcode, out, err
你就快到了。而不是
out, err = proc.communicate()
使用
out, err = proc.stdout, proc.stderr
关于您的 except 子句,我不确定您是否能够在超时后获得 stdout、stderr 和 returncode。给它一张支票。如果没有,请考虑
return "", "", 1
或 except 子句中类似的内容。