Python subprocess.checkoutput被称为进程错误

时间:2013-02-04 20:22:33

标签: python subprocess popen

在windows命令行中,我输入以下命令以启用Windows功能:

>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:Command'['dism.exe',' - online',' - Enable-Feature',' - FeatureName:MSMQ-HTTP']'返回非零退出状态11. / p>

任何人都可以解释为什么这不起作用?

1 个答案:

答案 0 :(得分:0)

Python的子进程模块和DISM.exe存在一些小问题。即使指定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()