<pre><code>from subprocess import *
c = 'command 1 && command 2 && command 3'
# for instance: c = 'dir && cd C:\\ && dir'
handle = Popen(c, stdin=PIPE, stderr=PIPE, stdout=PIPE, shell=True)
print handle.stdout.read()
handle.flush()
</code></pre>
<p>如果我不需要在命令和命令之间执行错误的话。在</p>
<p>更准确地说,使用<code>shell=True</code>(我刚才所说的)是,如果给定一个命令字符串而不是一个列表,那么就应该使用它。如果您想使用列表,建议如下:</p>
^{pr2}$
<p>然后捕获输出,或者您可以使用开放流并使用<code>handle.stdin.write()</code>,但这有点棘手。在</p>
<p>除非您只想执行、读和死,<code>.communicate()</code>是完美的,或者只是<code>.check_output(<cmd>)</code></p>
<p>关于<code>Popen</code>如何工作的好信息可以在这里找到(尽管主题不同):<a href="https://stackoverflow.com/questions/15650216/python-subprocess-stdin-write-a-string-error-22-invalid-argument">python subprocess stdin.write a string error 22 invalid argument</a></p>
<p><br/>
<br/>
<br/></p>
<h2>解决方案</h2>
<p>无论如何,这个<em>应该</em>起作用(<strong>您必须重定向STDIN</strong>和STDOUT):</p>
<pre><code>from subprocess import *
c = 'gdaltransform -s_srs \'+proj=lcc +lat_1=34.03333333333333 +lat_2=35.46666666666667 +lat_0=33.5 +lon_0=-118 +x_0=2000000 +y_0=500000 +ellps=GRS80 +units=m +no_defs\' -t_srs epsg:4326 \n' + str(x) + ' ' + str(y) + '\n'
handle = Popen(c, stdin=PIPE, stderr=PIPE, stdout=PIPE, shell=True)
print handle.stdout.read()
handle.flush()
</code></pre>