7
我有一个像下面这样的结构:链POPEN子进程正常
os.mkfifo('pipe.tmp')
enc = Popen(['encoder', '-i', 'pipe.tmp'])
cap = Popen(['capture', '-f', 'pipe.tmp'])
这里cap
是一个过程,通常写到一个文件(由-f
指定的),但我可以得到它的数据喷涌到屏幕通过提供/dev/stdout
作为输出文件。同样,enc
期望从类文件对象中读取,并且我可以通过提供-
作为输入来从管道中读取它。所以不是在操作系统中使用命名管道,我认为特殊的文件可能没有必要,我可以用一个无名管这样的..
cap = Popen(['capture', '-f', '/dev/stdout'], stdout=PIPE)
enc = Popen(['encoder', '-i', '-'], stdin=cap.stdout)
cap.stdout.close()
(还要注意的产卵的顺序颠倒)。我更喜欢这样做,因为临时文件似乎没有必要,但我有点担心这个构造是否会按我期望的方式链接进程。
- 是
/dev/stdout
是cap
是从OS的实际标准输出谈论不同?也就是说,在输入管道-
的enc
中,即使其他进程正在与OS上的/ dev/stdout聊天,我是否还会在这两个进程之间获得干净的数据通道? - 在阻塞/排队行为方面会有什么显着差异吗?我认为在我的第一个例子中,命名管道将是一个缓冲的4096字节,并且如果
cap
/enc
不够快写入/读取,将在任一端阻塞,但如果我错了,请纠正我。 - 是需要产卵或终止的任何特殊顺序,还是我应该知道的任何其他陷阱?