每个过程中的管道是否独立?

时间:2013-01-24 19:28:34

标签: python subprocess pipe

如果我生成多个subprocess.Popen(['commands', 'that', 'I', 'called'])并且每个stdin.write(..)p.communicate(...)与命令进行交互,它是否保证独立并将返回到每个进程(stdout)来自被叫命令)?

2 个答案:

答案 0 :(得分:2)

如果你这样做:

proc = subprocess.Popen(
    cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
stdout, _ = proc.communicate()

您将为每个进程获取一组单独的管道。值subprocess.PIPE只是告诉subprocess.Popen()创建新管道的特殊标志 - 因此上面的命令创建了两个新管道:stdin的一个管道和{{{1}的单独管道1}}。

如果你这样做:

stdout

新流程将与您的流程共享proc = subprocess.Popen(cmd) proc.wait() stdinstdout(基本上 - 内核方面将共享)。

答案 1 :(得分:0)

我不了解python,但就C而言,管道并不是每个进程都是独立的。

管道仅用于在父进程和子进程之间进行通信,甚至用于子进程本身之间。

特定进程在管道中写入的数据可以由管道读取端的另一个进程读取。