我运行的电脑安装在静音模式和缓存记录的具体文件。以下是命令我需要执行。

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% 直接未来的计划!

有2种方式来解决这个问题:

  1. 叫外壳。

    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]
    

其他提示

的问题是,您有效提供的Setup.exe只有一个参数。不要以为在外壳方面,你交出作为参数没有得到空间上分裂了的弦,那是你的义务!

所以,如果你是绝对肯定 “/ 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]

否则(我想这一个将是正确的),使用:

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

尝试把每个参数在它自己的串(重新格式化为可读性):

cmd = ['C:\Program Files\ My Installer\Setup.exe',
       '/s',
       '/v',
       '"/qn',
       '/lv',
       '%TEMP%\log_silent.log"']

subprocess.Popen(cmd, stdout=subprocess.PIPE).communicate()[0]

我不得不说虽然,这些双引号不正确的地方看我。

您表示:

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

时的目录名真正的“我的安装程序”(用前导空格)?

此外,作为一般规则,你应该在路径规范使用正斜杠。蟒蛇应该无缝地处理他们(甚至在Windows上)和你避免与蟒蛇解释反斜杠作为转义字符的任何问题。

(例如:

>>> s = 'c:\program files\norton antivirus'
>>> print s
c:\program files
orton antivirus

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top