2015-12-01 29 views
3

我通过subprocess.check_output()执行命令,因为我想将它的o/p存储在缓冲区中。如何验证subprocess.check_output()?

现在,虽然这样做,如果命令失败或者如果有任何错误,那么它会导致我的整个应用程序的问题。

我想要的是,即使命令失败,它应该只是打印并继续下一条指令。

有人能帮我解决吗?

下面是示例代码。要做到这一点

from subprocess import check_output 
buff=check_output(["command","argument"]) 
if buff=="condition": 
    print "Do Some Task " 
+0

为什么你不能只捕获'check_output()'引发的异常? – dimo414

回答

0

的一种方法是使用Popen.communicate方法上Process实例。

from subprocess import Popen, PIPE 
proc = Popen(["command", "argument"], stdout=PIPE, stderr=PIPE) 
out, err = proc.communicate() # Blocks until finished 
if proc.returncode != 0: # failed in some way 
    pass # handle however you want 
# continue here 
+0

不是一个更好的方法...''subprocess.check_output''会引发异常,返回值本身非零,并将子流程的输出作为字符串返回。如果您想处理程序中其他位置的正常情况,则无需检查返回代码或手动引发异常。 –

+0

'check_output'连接'stderr'和'stdout'的输出吗? –

+0

如果你通过'stderr = subprocess.STDOUT',那么是的 –