2013-02-04 26 views
0

在Windows命令行,我輸入如下命令來啓用Windows的一項功能:Python的subprocess.checkoutput這個過程被稱爲錯誤

>dism.exe -online -Enable-Feature -FeatureName:MSMQ-HTTP 

此命令工作得很好,使MSMQ-HTTP功能。現在我正在寫一個Python腳本來自動完成這個過程,我的代碼

subprocess.check_output(['dism.exe', '-online', '-Enable-Feature', '-FeatureName:MSMQ-HTTP'], shell=True) 

返回一個討厭的錯誤,CalledProcessError:命令「[」 dism.exe」,‘ - 線上’,‘-Enable-功能’, '-FeatureName:MSMQ-HTTP']'返回非零退出狀態11.

任何人都可以闡明爲什麼這不起作用?

+1

我通常不及格名單,如果我要使用'殼= TRUE',但我不知道這東西是如何工作在Windows .. 。 – mgilson

+0

另外,從命令行調用時,你能驗證程序的退出代碼是否爲'0'嗎? – mgilson

+0

我嘗試了兩個shell = False並完全刪除該參數,並且是的,我剛剛使用echo%ERRORLEVEL% – Murkantilism

回答

0

Python的子進程模塊和DISM.exe有一些bitness問題。即使指定C使用時:\ WINDOWS \ SYSTEM32 \ dism.exe絕對路徑我得到的錯誤代碼11

我的最終解決是寫10行批處理文件:

@echo off 
if EXIST %WINDIR%\system32\dism.exe ( 
    set DISM=%WINDIR%\system32\dism.exe 
) 
if EXIST %WINDIR%\SysNative\dism.exe ( 
    set DISM=%WINDIR%\SysNative\dism.exe 
) 
%DISM% -online -Enable-Feature -FeatureName:MSMQ-ADIntegration 
%DISM% -online -Enable-Feature -FeatureName:MSMQ-HTTP 
%DISM% -online -Enable-Feature -FeatureName:MSMQ-Triggers 

這個小批處理文件通過子從我的Python腳本被稱爲:

def MSMQ(): 
    p = subprocess.Popen(r"PrereqInstall\SetMSMQFeatures.bat", shell=True) 
    stout, stderr = p.communicate() 
相關問題