7
私は、次のような構文があります。ここに連鎖のpopenのサブプロセスが適切に
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()
(またノート産卵のための逆転)。一時ファイルが不要なように見えるので、私はこれがより好きですが、私はこのコンストラクトが私の予想どおりにプロセスを連鎖するかどうか少し気になります。
cap
がOSで実際の標準出力からの個別に話をしていることを/dev/stdout
のですか?つまり、入力パイプ-
をenc
にすると、他のプロセスがOS上で/ dev/stdoutとチャットしていても、これらの2つのプロセス間できれいなデータチャネルが得られますか?- ブロッキング/キューイングの動作に大きな違いがありますか?私は私の最初の例では、名前付きパイプはバッファされた4096バイトになり、いずれかの端でブロックされます。
cap
/enc
が十分に速く/読み書きしていませんが、私が間違っていれば私を修正します。 - は、必要な産卵または終了の特別な順序ですか、それとも私が知っておくべき他の問題?