2017-10-03 22 views
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

答えて

0

機能os.mkfifo(path)は、パスを作成します(すべてのフォルダが、それはすべてのパスを構築存在しない場合)が必要です。

ので、あなたは次のようにファイル名を追加する必要があります。サーバーは、読書のためのFIFOをオープンし、クライアント:fifo = open(path + file, 'r')一般

は、FIFOは「クライアント」と「サーバ」タイプのプロセス間でランデブーとして使用されています書くためにそれを開きます。 (はmkfifo 注)FIFOを開かない - それはちょうどos.mkfifoによると、ランデブーポイントに

+0

'path + file'は文字列を連結するだけで、私の場合は'/tmp'が挑戦的に存在するため、作成する必要はありません。 'os.mkfifo'はファイルを正常に作成します' '' ls -latrh/tmp/pipe prw-r - r-- 1 oleg users 0 10月3 08:30/tmp/pipe''' –

1

を作成し、あなたは fifo = open(path, dir_fd='w')

+0

動作しません。 'os.mkfifo(path、dir_fd = 'w')' throws 'TypeError:引数は整数かNoneで、strではなく、' dir_fd = os.O_WRONLY'はそうではありません。しかし結果は同じです: 'open'は永遠にブロックします –

1

これを考え出したを使用する必要があります。 openパイプが反対側に開くまで

関連する問題