如何在使用超时时从 Python 的 Subprocess.run 捕获错误



我不知道如何使用python的subprocess.run来捕获stdout、stderr和exitcode。。。以及其他可以捕捉到的东西。我还必须使用timeout选项,因为我运行的数千个命令中有一些是挂起的,即无休止地运行。我打赌我错过了一些显而易见的东西,我道歉。我已经花了好几天的时间在这上面了,但我想不出来。

如果你能给我任何帮助,我将不胜感激。

这是我的缺陷代码:

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。给它一张支票。如果不是,那么在except子句中考虑return "", "", 1或类似的内容。

相关内容

  • 没有找到相关文章

最新更新