如何在使用超时时从 python 的 subprocess.run 捕获错误

how to capture error from python's subprocess.run, while using timeout

我不知道如何使用 python 的 subprocess.run 来捕获 stdout、stderr 和 exitcode ...以及任何其他可以捕获的东西。我还必须使用超时选项,因为我正在 运行ning 的数千个命令中有一些命令挂起,即 运行 没完没了。我打赌我错过了一些明显的东西,我道歉。我在这上面花了几天时间,还是想不通。

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

这是我的错误代码:

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 子句中的类似内容。