我不知道如何使用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
或类似的内容。