如何在使用超时时从 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 子句中的类似内容。
我不知道如何使用 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 子句中的类似内容。