gpt4 book ai didi

python - subprocess.Popen 错误

转载 作者:太空宇宙 更新时间:2023-11-03 12:43:13 24 4
gpt4 key购买 nike

我正在静默模式下运行 msi 安装程序并将日志缓存在特定文件中。以下是我需要执行的命令。

C:\Program Files\My Installer\Setup.exe/s/v "/qn/lv %TEMP%\log_silent.log"

我用过:

subprocess.Popen(['C:\Program Files\ My Installer\Setup.exe', '/s /v "/qn /lv %TEMP%\log_silent.log"'],stdout=subprocess.PIPE).communicate()[0]

执行命令,但它无法识别该操作并给出有关选择错误选项的错误。我已经交叉验证,发现该命令只能以这种方式工作。

最佳答案

这个问题很微妙。

您正在直接执行程序。它得到:

argv[0] = "C:\Program Files\ My Installer\Setup.exe"
argv[1] = /s /v "/qn /lv %TEMP%\log_silent.log"

而它应该是:

argv[1] = "/s"
argv[2] = "/v"
argv[3] = "/qn"
argv[4] = "/lv %TEMP%\log_silent.log"

换句话说,它应该接收 5 个参数,而不是 2 个参数。

此外,%TEMP% 对程序来说是直接未知的!

有两种方法可以解决这个问题:

  1. 调用 shell。

    p = subprocess.Popen('C:\Program Files\ My Installer\Setup.exe /s /v "/qn /lv %TEMP%\log_silent.log"', shell=True)
    output = p.communicate()[0]
  2. 直接调用程序(更安全)

    s = ['C:\Program Files\ My Installer\Setup.exe', '/s /v "/qn /lv %TEMP%\log_silent.log"']
    safes = [os.path.expandvars(p) for p in argument_string]
    p = subprocess.Popen(safes[0], safes[1:])
    output = p.communicate()[0]

关于python - subprocess.Popen 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/526734/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com