2015-12-18 29 views
0

在子模塊(https://docs.python.org/2/library/subprocess.html) 如果需要單獨寫在引號中的每一個字或能以某種方式如何子過程調用和追趕的成功

進行分組對於例如,它是不是很清楚,我在讀了起來:

cmd -vvv <positional arg> <keyword arg> <keyword arg> 

這是調用子過程的正確方法:

subprocess.call(['command', '-vvv', '<positional arg>', '<keyword arg>', '<keyword arg>']) 
subprocess.call(['command', '-vvv', '<positional arg>', '<keyword arg> <keyword arg>']) 
subprocess.call(['command', '-vvv', '<positional arg> <keyword arg> <keyword arg>']) 

怎麼也捉,如果它得到正確處理。這是正確的方式:

a = subprocess.call(...from above...) 
if a == 0: 
    success 
else: 
    fail 

這似乎並不正確,但我看到它回到「0」時,它的成功,因此認爲上述溶液。

+0

我不認爲subprocess.call接受一個列表,而是一個字符串。所以只是'subprocess.call(「cmd -vvv <位置參數>」)' – tmthyjames

+1

@tmthyjames,'call'需要一個列表或一個字符串。 Imho,使用列表通常是使用'call'的更好方法。 –

+0

@BiRico Ahh。不知道。很高興知道。 – tmthyjames

回答

3

第一是做正確的方式:

subprocess.call(['command', '-vvv', '<positional arg>', '<keyword arg>', '<keyword arg>']) 

更好地利用subprocess.check_call(),而不是檢查自己的失敗:與參數

運行命令。等待命令完成。如果 退出代碼爲零,則返回,否則提升 CalledProcessError。 CalledProcessError對象將在返回碼屬性中具有 返回碼。

如果您還需要過程輸出,請使用subprocess.check_output()

+0

這是否解決您的問題? –