私はPythonで名前付きパイプを使ってIPCを実装しようとしていますが、問題があります。 open
ブロックプロセスopen(path, 'r')
Pythonは永久にfifoブロックをオープン
私が間違って何をやっていると同じ
import os
path = '/tmp/fifo'
os.mkfifo(path)
fifo = open(path, 'w') # never returns
?
のPython 3.6.1
私はPythonで名前付きパイプを使ってIPCを実装しようとしていますが、問題があります。 open
ブロックプロセスopen(path, 'r')
Pythonは永久にfifoブロックをオープン
私が間違って何をやっていると同じ
import os
path = '/tmp/fifo'
os.mkfifo(path)
fifo = open(path, 'w') # never returns
?
のPython 3.6.1
機能os.mkfifo(path)
は、パスを作成します(すべてのフォルダが、それはすべてのパスを構築存在しない場合)が必要です。
ので、あなたは次のようにファイル名を追加する必要があります。サーバーは、読書のためのFIFOをオープンし、クライアント:fifo = open(path + file, 'r')
一般
は、FIFOは「クライアント」と「サーバ」タイプのプロセス間でランデブーとして使用されています書くためにそれを開きます。 (はmkfifo 注)FIFOを開かない - それはちょうどos.mkfifoによると、ランデブーポイントに
を作成し、あなたは fifo = open(path, dir_fd='w')
動作しません。 'os.mkfifo(path、dir_fd = 'w')' throws 'TypeError:引数は整数かNoneで、strではなく、' dir_fd = os.O_WRONLY'はそうではありません。しかし結果は同じです: 'open'は永遠にブロックします –
これを考え出したを使用する必要があります。 open
パイプが反対側に開くまで
'path + file'は文字列を連結するだけで、私の場合は'/tmp'が挑戦的に存在するため、作成する必要はありません。 'os.mkfifo'はファイルを正常に作成します' '' ls -latrh/tmp/pipe prw-r - r-- 1 oleg users 0 10月3 08:30/tmp/pipe''' –