擅长:python、mysql、java
<p>这两种形式的区别在于,以<code>shell=True</code>作为参数,字符串按原样传递给shell,然后由shell解释它。这将导致(使用bash):</p>
<pre><code>sed -i -e \$amystring /home/map/myfile
</code></pre>
<p>正在运行。在</p>
<p>使用list参数和默认的<code>shell=False</code>,python直接用列表中的参数调用可执行文件。在本例中,文本字符串被传递给sed</p>
^{pr2}$
<p>并且<code>'\$amystring'</code>不是有效的<code>sed</code>表达式。在这种情况下,你需要打电话</p>
<pre><code>>>> COMMAND = ['sed', '-i', '-e', "$amystring", '/home/map/myfile']
>>> subprocess.Popen(COMMAND).communicate(input=None)
</code></pre>
<p>因为不需要为shell转义字符串。在</p>