在Python中使用子进程的Shell管道

时间:2012-03-03 00:57:00

标签: python shell subprocess pipe

我在使用subprocess从Python调用shell命令时读取了我在StackOverflow上找到的每个线程,但我找不到适用于我的情况的答案:

我想从Python中执行以下操作:

  1. 运行shell命令command_1。收集变量result_1

  2. 中的输出
  3. 将管道 result_1导入command_2并收集result_2上的输出。换句话说,使用我在前一步中运行command_1 | command_2 时获得的结果运行command_1

  4. 将相同的管道result_1放入第三个命令command_3并将结果收集到result_3

  5. 到目前为止,我已经尝试过:

    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不能模拟获取管道的命令输出的输出过程。

    这是否可以使用子进程?如果是这样,怎么样?

1 个答案:

答案 0 :(得分:8)

你可以这样做:

pipe = Popen(command_2, shell=True, stdin=PIPE, stdout=PIPE)
pipe.stdin.write(result_1)
pipe.communicate()

而不是管道。