fifo - 循环读取

2024-02-12

我想用os.mkfifo http://docs.python.org/2/library/os.html#os.mkfifo用于程序之间的简单通信。我在循环读取 fifo 时遇到问题。

考虑这个玩具示例,其中我有一个读取器和一个写入器使用 fifo。我希望能够循环运行读取器来读取进入 fifo 的所有内容。

# reader.py
import os
import atexit

FIFO = 'json.fifo'

@atexit.register
def cleanup():
    try:
        os.unlink(FIFO)
    except:
        pass

def main():
    os.mkfifo(FIFO)
    with open(FIFO) as fifo:
#        for line in fifo:              # closes after single reading
#        for line in fifo.readlines():  # closes after single reading
        while True:
            line = fifo.read()          # will return empty lines (non-blocking)
            print repr(line)

main()

还有作者:

# writer.py
import sys

FIFO = 'json.fifo'


def main():
    with open(FIFO, 'a') as fifo:
        fifo.write(sys.argv[1])

main()

如果我跑python reader.py然后python writer.py foo,“foo”将被打印,但 fifo 将被关闭并且读取器将退出(或在while环形)。我希望读者留在循环中,这样我就可以多次执行作者。

Edit

我用这个片段来处理这个问题:

def read_fifo(filename):
    while True:
        with open(filename) as fifo:
            yield fifo.read()

但也许有一些更简洁的方法来处理它,而不是重复打开文件......

Related

  • 让 readline 在 FIFO 上阻塞 https://stackoverflow.com/questions/2406365/getting-readline-to-block-on-a-fifo

您无需重复重新打开该文件。您可以使用 select 来阻止,直到数据可用。

with open(FIFO_PATH) as fifo:
    while True:
        select.select([fifo],[],[fifo])
        data = fifo.read()
        do_work(data)

在此示例中,您不会读取 EOF。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

fifo - 循环读取 的相关文章

随机推荐

  • 属性存在但 property_exists() 返回 false;

    嗯 我真的很困惑 当我检查属性是否存在时 它返回 false if property exists pais id false 但当我调试时它告诉我它就在那里 print r pais gt id 1 print r property ex
  • 如何在 Verilog 中综合 While 循环?

    我尝试设计一个 Booth 乘法器 它在所有编译器中运行良好 包括 Modelsim Verilogger Extreme Aldec Active Hdl 和 Xilinx Isim 我知道模拟和综合是两个不同的过程 而且只有少数Veri
  • 使用 SELECT 执行 INSERT 插入多条记录

    在下图中 DodgyOldTable 和 MainTable 之间存在 1 1 关系 表 Option 包含 OptionDesc 字段中带有 OptionVal1 OptionVal2 和 OptionVal3 的记录 我需要使用 Dod
  • PHP 中未终止的实体引用

    这是我的代码
  • 什么是名称查找机制?

    我想知道C 名称查找机制是什么 名称查找是识别名称含义的过程 名称查找有两个目的 消除代码解析的歧义 确定代码的确切含 义 例如 如果你有这个代码 T a 这取决于是否T是否是一个类型 如果是一个类型 它将是一个声明a 如果它不是类型 则将
  • 我必须在 Next.js 项目中使用express吗?

    我正在制作一个网站Next js Next js提供SSR and dynamic routing 我必须使用express 如果是这样 为什么我必须使用它 具有什么样的特点express有用但未提供的Next js I think nex
  • 提供满足esm、commonjs和bundlers的模块、主要和浏览器字段

    我有许多已发布的 npm 包 我已将它们升级为提供 commonjs 和 esm 构建 有些包可能同时适用于节点和浏览器 所有使用 webpack 或 rollup 编译的包 所有内容都用打字稿编写并转换为dist目录 我创建了一个comm
  • iOS 上的 html5 录音

    我正在尝试访问 iOS 上的麦克风以捕获用户输入
  • Azure SQL 中所有用户的列表

    如何列出可以连接到我的 sql server 数据库的所有用户 现在可以找到任何 sql 命令 我尝试了互联网上的一些链接 但没有一个有效 我尝试过的一些命令 SELECT FROM sys sql logins SELECT FROM s
  • 我应该如何配置 grunt-usemin 来使用相对路径

    我有一个由 yeoman generator 支持的 grunt 项目 我是基于generator webapp https github com yeoman generator webapp 如果有帮助 您可以在GitHub https
  • MVVM 和 StructureMap 的使用

    我的 MVVM 应用程序中有大量父级详细信息 ViewModel 像这样的事情 SchoolsViewModel SchoolViewModel LessonViewModel PupilsViewModel PupilViewModel
  • Bitset 作为函数的返回值

    我想要一个接口 其函数返回一个位集 class IMyInterface public virtual std bitset lt 100 gt GetBits 0 问题是我不想强制大小bitset 所以我想我必须使用boost dynam
  • Ruby 2.0 字节码导出/导入

    我一直在读关于红宝石 2 0 新功能 http www rubyinside com ruby 2 0 implementation work begins what is ruby 2 0 and whats new 5515 html
  • 使用 JavaScript 创建 Base64 编码图像

    由于图像是数据 我们可以将代码编写为 img src alt Red dot 现在我的观点是 我们可以使用 javascript 创建 base64 数据吗 有什么框架吗 我的实际要求是我有一个像 Cow 这样的字符串 我希望它作为图像 注
  • Java 最终抽象类

    我有一个非常简单的问题 我想要一个 Java 类 它提供一个公共静态方法 该方法可以执行某些操作 这只是为了封装目的 将所有重要的内容都放在一个单独的类中 这个类既不应该被实例化 也不应该被扩展 这让我写道 final abstract c
  • 打开软键盘时,DialogFragment 始终会调整大小

    我在全屏显示的自定义 DialogFragment 方面遇到一些问题 该对话框包含可滚动的内容并具有自动完成文本视图 最初 对话框在顶部显示有边距 以编程方式设置为布局内容顶部的透明视图 一旦 autocompletetextview 获得
  • Android-如何区分 Galaxy S-3 和 Galaxy S-4 布局?

    我在区分三星 Galaxy s4 和三星 Galaxy s3 的布局文件夹时遇到问题 我尝试过layout sw360dp layout sw360dp xxhdpi layout sw360dp xhdpi等 一直以来 galaxy s4
  • 是否可以在 iCal.net 上使用 UTC 偏移量代替时区名称?

    我的应用程序将 UTC 偏移量存储在用户配置文件上 例如 03 00 并且正如 iCal net Wiki 中的此页面提到的那样 我似乎只能使用时区来分配给事件 https github com rianjs ical net wiki W
  • 在 Chrome 中单击并拖动光标

    我正在开发一个网络应用程序 我需要覆盖一些默认光标 在 Chrome 中 当我单击然后拖动它时 它总是将光标更改为文本选择 我似乎找不到任何方法来覆盖它 我正在使用jquery 通常的 document css cursor default
  • fifo - 循环读取

    我想用os mkfifo http docs python org 2 library os html os mkfifo用于程序之间的简单通信 我在循环读取 fifo 时遇到问题 考虑这个玩具示例 其中我有一个读取器和一个写入器使用 fi