Python subprocess.checkoutput 调用过程错误

0 投票
1 回答
1084 浏览
提问于 2025-04-17 14:44

在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']' returned non-zero exit status 11。

有人能告诉我为什么这个不工作吗?

1 个回答

0

在使用Python的subprocess模块和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脚本调用的,使用了subprocess模块:

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

撰写回答