当前位置:  开发笔记 > 编程语言 > 正文

subprocess.Popen错误

如何解决《subprocess.Popen错误》经验,为你挑选了1个好方法。

我在静默模式下运行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]

执行命令然而它无法识别操作并且在选择错误选项时给出错误.我已经交叉验证,发现命令只能这样工作.



1> kylebrooks..:

问题非常微妙.

你正在直接执行该程序.它得到:

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%程序直接未知!

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

    调用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]
    

    直接打电话给程序(更安全)

    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]
    

推荐阅读
mobiledu2402851373
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有