如果我生成多个subprocess.Popen(['commands', 'that', 'I', 'called'])
并且为每个我执行stdin.write(..)
或p.communicate(...)
与命令交互,它是否保证是独立的并且会返回到每个进程(来自被调用命令的标准输出)?
问问题
98 次
2 回答
2
如果你这样做:
proc = subprocess.Popen(
cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
stdout, _ = proc.communicate()
您将为每个进程获得一组单独的管道。该值subprocess.PIPE
只是一个特殊的标志,用来告诉subprocess.Popen()
创建一个新管道——所以上面的命令创建了两个新管道:一个管道用于stdin
和一个单独的管道stdout
。
如果你这样做:
proc = subprocess.Popen(cmd)
proc.wait()
新进程将与您的进程共享stdin
、stdout
和stderr
(嗯,基本上 - 内核端将被共享)。
于 2013-01-24T19:36:01.653 回答
0
我不了解python,但就C而言,管道并不是每个进程都独立的。
管道的唯一目的是在父进程和子进程之间甚至子进程本身之间进行通信。
由特定进程写入管道的数据可以由另一个进程从管道的读取端读取。
于 2013-01-24T19:32:08.383 回答