我有如下构造:
os.mkfifo('pipe.tmp')
enc = Popen(['encoder', '-i', 'pipe.tmp'])
cap = Popen(['capture', '-f', 'pipe.tmp'])
此处cap
是一个通常写入文件(由-f
指定)的过程,但我可以通过提供/dev/stdout
作为输出文件将数据写入屏幕。类似地,enc
期望从类似文件的对象中读取,并且我能够通过提供-
作为输入来从管道读取它。所以不是在os中使用命名管道,我认为特殊文件可能没有必要,我可以使用这样的未命名管道..
cap = Popen(['capture', '-f', '/dev/stdout'], stdout=PIPE)
enc = Popen(['encoder', '-i', '-'], stdin=cap.stdout)
cap.stdout.close()
(注意产卵顺序的逆转)。我更喜欢这个,因为临时文件似乎没必要,但我有点担心这个构造是否会以我期望的方式链接进程。
/dev/stdout
正在谈论的cap
与操作系统中的实际标准输出不同?也就是说,使用-
中的输入管道enc
,我会在这两个进程之间获得一个干净的数据通道,即使其他进程正在与OS上的/ dev / stdout聊天吗?cap
/ enc
没有足够快地写入/读取,将在任一端阻塞,但如果我是正确的话,请纠正我错误。 答案 0 :(得分:1)