<p>第一:这个问题会使<code>\t</code>在Python(和其他语言)中具有特殊意义,您应该使用<code>"c:\\temp\\test.zip"</code>,或者您必须使用前缀<code>r</code>来创建原始字符串<code>r"c:\temp\test.zip"</code></p>
<p>第二:当您不使用<code>shell=True</code>时,您需要如下列表</p>
<pre><code>["certutil", "-urlcache", "-split", "-f", "https://www.contextures.com/SampleData.zip", "c:\\temp\\test.zip"]
</code></pre>
<p>有时人们只是使用<code>split(' ')</code>来创建它</p>
<pre><code>"certutil -urlcache -split -f https://www.contextures.com/SampleData.zip c:\\temp\\test.zip".split(" ")
</code></pre>
<p>然后您可以测试这两个版本</p>
<pre><code>cmd = "certutil -urlcache -split -f https://www.contextures.com/SampleData.zip c:\\temp\\test.zip"
Popen(cmd.split(' '))
Popen(cmd, shell=True)
</code></pre>
<hr/>
<p><strong>编辑:</strong></p>
<p>如果您将使用更复杂的命令(即字符串中带有<code>" "</code>),那么您可以使用标准模块<a href="https://docs.python.org/3/library/shlex.html" rel="nofollow noreferrer">shlex</a>和命令<code>shlex.split(cmd)</code>。要使<code>\\</code>保持在路径中,您可能需要`posix=False</p>
<pre><code>import shlex
cmd = "certutil -urlcache -split -f https://www.contextures.com/SampleData.zip c:\\temp\\test.zip"
Popen(shlex.split(cmd, posix=False))
</code></pre>
<hr/>
<p>例如,这给出了包含4个元素的错误列表</p>
<pre><code>' text "hello world" other'.split(' ')
[' text', '"hello', 'world"', ' other']
</code></pre>
<p>但这给出了包含3个元素的正确列表</p>
<pre><code>shlex.split(' text "hello world" other')
[' text', 'hello world', ' other']
</code></pre>