2015-12-01 51 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',那麼是的 –