我详细阅读了子流程提供的函数 - call,check_call,check_output,并了解它们各自的工作方式以及功能上的不同。我目前使用check_output,这样我就可以有机会获得标准输出,并使用“try块”来捕获异常,如下所示:从子流程调用中获取退出代码和stderr
# "cmnd" is a string that contains the command along with it's arguments.
try:
cmnd_output = check_output(cmnd, stderr=STDOUT, shell=True, timeout=3, universal_newlines=True);
except CalledProcessError:
print("Status : FAIL")
print("Output: \n{}\n".format(cmnd_output))
当异常被抛出我遇到的问题是,“ cmnd_output”没有初始化,没有访问到标准错误,我也得到了以下错误消息:
print("Output: \n{}\n".format(cmnd_output))
UnboundLocalError: local variable 'cmnd_output' referenced before assignment
我想那是因为异常导致‘check_output’立即保释没有任何进一步的处理,又名分配到“cmnd_output”,在try块中。如果我错了,请纠正我。
有没有什么办法可以访问stderr(没关系,如果它被发送到stout)并且可以访问退出代码。我可以手动检查通过/失败的基础上退出代码与例外throuwn。
谢谢, 艾哈迈德。
太棒了。这个解决方案非常完美。谢谢。 – 2013-04-24 18:37:35
我收到此错误:'RET = subprocess.check_output(CMD,标准错误= STDOUT,壳=真)'' NameError:全局名称 '标准输出' 不defined' – ARH 2014-07-16 18:06:04
@ARH,HTTPS://docs.python。 org/3/library/subprocess.html#subprocess.STDOUT – warvariuc 2014-07-17 05:22:49