擅长:python、mysql、java
<p>如果在命令中使用<code>|</code>或<code>></code>,那么还需要使用<code>shell=True</code>。在</p>
<p>如果使用<code>shell=True</code>,则<code>Popen</code>的第一个参数应该是字符串,而不是列表:</p>
<pre><code>ssh_upd = Popen(
'ssh {server} sudo -S echo "{mtpt} {filervol}" | sudo tee -a /etc/{map} > /dev/null'.format(server=server, mtpt=mtpt, filervol=filervol, map=map), stdout=None, stdin=PIPE, stderr=STDOUT, shell=True)
</code></pre>
<p>请注意,如果发送到Popen的命令包含用户输入,则不应使用<code>shell=True</code>,因为这可能存在安全风险。(请务必阅读<a href="http://docs.python.org/2/library/subprocess.html#frequently-used-arguments" rel="nofollow">the Warning in the docs</a>。)</p>
<p>您可以避免使用<code>shell=True</code>和管道<code>|</code>,以及重定向{<cd2>},方法是使用多个popen<a href="http://docs.python.org/2/library/subprocess.html#replacing-shell-pipeline" rel="nofollow">connecting one's stdout to the next one's stdin</a>。在</p>