持久的subprocess.Popen会话

时间:2014-04-17 18:23:26

标签: python

我正在尝试运行一个命令,然后在同一个环境中运行另一个命令(比如我在第一个命令中设置了一个环境变量,我希望它可用于第二个命令)。我试过这个:

import subprocess

process = subprocess.Popen("echo \"test\"", shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE);

process.stdin.write("echo \"two\"\n")
process.stdin.flush()

stdout, stderr = process.communicate()
print "stdout: " + stdout
print "stderr: " + stderr

但输出是:

stdout: test

stderr:

我希望它能像:

stdout: test
two

stderr:

任何人都可以看到有什么问题吗?

1 个答案:

答案 0 :(得分:1)

问题是您正在写入流程stdin的{​​{1}},而不是从echo读取,而是继续stdin继续阅读bash。要获得所需效果,请查看以下代码:

stdin

输出:

import subprocess
process = subprocess.Popen("/bin/bash", shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE);

process.stdin.write("echo \"test\"\n")
process.stdin.write("echo \"two\"\n")
process.stdin.flush()

stdout, stderr = process.communicate()
print "stdout: " + stdout
print "stderr: " + stderr

更新:请查看this question以解决流输出问题。