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