擅长:python、mysql、java
<p>只是个便条。<code>shell=True</code>可能是o.p的正确解决方案,因为它们没有犯下以下错误,但是如果不将可执行文件与其参数分离,也可能会出现“No such file or directory”错误。</p>
<pre><code>import subprocess as sp, shlex
sp.Popen(['echo 1']) # FAILS with "No such file or directory"
sp.Popen(['echo', '1']) # SUCCEEDS
sp.Popen(['echo 1'], shell=True) # SUCCEEDS, but extra overhead
sp.Popen(shlex.split('echo 1')) # SUCCEEDS, equivalent to #2
</code></pre>
<p>如果没有<code>shell=True</code>,Popen希望可执行文件是args的第一个元素,这就是它失败的原因,没有“echo 1”可执行文件。添加<code>shell=True</code>将调用系统shell并将<code>args</code>的第一个元素传递给shell。i、 e.对于linux,<code>Popen(['echo 1'], shell=True)</code>相当于<code>Popen('/bin/sh', '-c', 'echo 1')</code>,这比您可能需要的开销要多。有关<code>shell=True</code>实际有用的情况,请参见<a href="https://docs.python.org/2/library/subprocess.html#popen-constructor" rel="noreferrer">Popen() documentation</a>。</p>