如果我生成多个subprocess.Popen(['commands', 'that', 'I', 'called'])
并且每个stdin.write(..)
或p.communicate(...)
与命令进行交互,它是否保证独立并将返回到每个进程(stdout)来自被叫命令)?
答案 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()
,stdin
和stdout
(基本上 - 内核方面将共享)。
答案 1 :(得分:0)
我不了解python,但就C而言,管道并不是每个进程都是独立的。
管道仅用于在父进程和子进程之间进行通信,甚至用于子进程本身之间。
特定进程在管道中写入的数据可以由管道读取端的另一个进程读取。