我在使用subprocess
从Python调用shell命令时读取了我在StackOverflow上找到的每个线程,但我找不到适用于我的情况的答案:
我想从Python中执行以下操作:
运行shell命令command_1
。收集变量result_1
将管道 result_1
导入command_2
并收集result_2
上的输出。换句话说,使用我在前一步中运行command_1 | command_2
时获得的结果运行command_1
将相同的管道result_1
放入第三个命令command_3
并将结果收集到result_3
。
到目前为止,我已经尝试过:
p = subprocess.Popen(command_1, stdout=subprocess.PIPE, shell=True)
result_1 = p.stdout.read();
p = subprocess.Popen("echo " + result_1 + ' | ' +
command_2, stdout=subprocess.PIPE, shell=True)
result_2 = p.stdout.read();
原因似乎是"echo " + result_1
不能模拟获取管道的命令输出的输出过程。
这是否可以使用子进程?如果是这样,怎么样?
答案 0 :(得分:8)
你可以这样做:
pipe = Popen(command_2, shell=True, stdin=PIPE, stdout=PIPE)
pipe.stdin.write(result_1)
pipe.communicate()
而不是管道。