Python永远打开fifo块
Posted
技术标签:
【中文标题】Python永远打开fifo块【英文标题】:Python open fifo blocks forever 【发布时间】:2017-10-03 04:55:00 【问题描述】:我正在尝试在 Python 中使用命名管道来实现 IPC,但是有一个问题。 open
阻塞进程
import os
path = '/tmp/fifo'
os.mkfifo(path)
fifo = open(path, 'w') # never returns
与open(path, 'r')
相同
我做错了什么?
Python 3.6.1
【问题讨论】:
【参考方案1】:想通了。 open
阻塞直到管道在另一侧打开
【讨论】:
【参考方案2】:根据os.mkfifo,需要使用
fifo = open(path, dir_fd='w')
【讨论】:
不起作用。os.mkfifo(path, dir_fd='w')
抛出 TypeError: argument should be integer or None, not str
和 dir_fd=os.O_WRONLY
没有。但结果是一样的:open
永远阻塞
dir_fd
应该是一个文件描述符,读/写标志。【参考方案3】:
函数os.mkfifo(path)
创建路径是需要的(如果所有的文件夹不存在它建立所有的路径)。
所以,你需要像这样添加文件名:fifo = open(path + file, 'r')
通常,FIFO 用作“客户端”和“服务器”类型进程之间的集合点:服务器打开 FIFO 进行读取,客户端打开 FIFO 进行写入。 请注意,mkfifo() 不会打开 FIFO——它只是创建集合点
【讨论】:
path + file
只会连接字符串,在我的情况下 /tmp
绝对存在,无需创建它。 os.mkfifo
创建文件成功ls -latrh /tmp/pipe prw-r--r-- 1 oleg users 0 Oct 3 08:30 /tmp/pipe
以上是关于Python永远打开fifo块的主要内容,如果未能解决你的问题,请参考以下文章
我可以在 Linux 上打开命名管道以在 Python 中进行非阻塞写入吗?