我正在尝试运行一个命令,然后在同一环境中运行另一个命令(比如说,如果我在第一个命令中设置环境变量,我希望它可用于第二个命令)。我试过这个:
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:
谁能看出问题所在吗?
最佳答案
问题是您正在写入进程 echo
的 stdin
,该进程没有从其 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
输出:
stdout: test
two
stderr:
更新:看看this question解决流输出问题。
关于python - 持久子进程.Popen session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23140638/