【问题标题】:Python open fifo blocks foreverPython永远打开fifo块
【发布时间】: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

【问题讨论】:

    标签: python named-pipes


    【解决方案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 strdir_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
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-19
      • 1970-01-01
      • 1970-01-01
      • 2012-09-19
      • 1970-01-01
      相关资源
      最近更新 更多