擅长:python、mysql、java
<p>如果要在同一个<em>会话/shell</em>中一个接一个地执行多个命令,则必须启动一个shell并将所有命令(一次一个,后跟一个新行)馈送给它,然后在最后关闭管道。如果有些命令不是真正的进程,而是可以改变shell环境的shell命令,这是有意义的。</p>
<p>在Windows下使用Python2.7的示例:</p>
<pre><code>encoding = 'latin1'
p = subprocess.Popen('cmd.exe', stdin=subprocess.PIPE,
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
for cmd in cmds:
p.stdin.write(cmd + "\n")
p.stdin.close()
print p.stdout.read()
</code></pre>
<p>要让这段代码在Linux下运行,您必须将<code>cmd.exe</code>替换为<code>/bin/bash</code>,并可能将编码更改为utf8。</p>
<p>对于Python 3,您必须对命令进行编码,可能还要对其输出进行解码,并在print中使用括号。</p>
<p>注意:这只会产生很小的效果。如果在关闭stdin管道之前有足够的输出来填充管道缓冲区,则此代码将死锁。一种更健壮的方法是让第二个线程读取命令的输出,以避免出现这种问题。</p>