linux python 命名管道,Python读取命名管道

在典型的UNIX方式中,read(2)返回0字节以指示文件结尾,这可能意味着:文件中没有更多字节

套接字的另一端已关闭连接

作者已关闭了一个管道

在您的例子中,fifo.read()返回一个空字符串,因为编写器已关闭其文件描述符。

你应该发现这种情况并跳出你的圈子:

读卡器.py:import os

import errno

FIFO = 'mypipe'

try:

os.mkfifo(FIFO)

except OSError as oe:

if oe.errno != errno.EEXIST:

raise

print("Opening FIFO...")

with open(FIFO) as fifo:

print("FIFO opened")

while True:

data = fifo.read()

if len(data) == 0:

print("Writer closed")

break

print('Read: "{0}"'.format(data))

示例会话

终端1:$ python reader.py

Opening FIFO...

终端2:$ echo -n 'hello' > mypipe

终端1:FIFO opened

Read: "hello"

Writer closed

$

更新1-持续重新打开

您表示希望继续监听管道上的写入,甚至可能在写入程序关闭之后。

为了有效地做到这一点,你可以(而且应该)利用以下事实Normally, opening the FIFO blocks until the other end is opened also.

在这里,我在open和read循环周围添加另一个循环。这样,一旦管道关闭,代码将尝试重新打开它,这将阻塞直到另一个编写器打开管道:import os

import errno

FIFO = 'mypipe'

try:

os.mkfifo(FIFO)

except OSError as oe:

if oe.errno != errno.EEXIST:

raise

while True:

print("Opening FIFO...")

with open(FIFO) as fifo:

print("FIFO opened")

while True:

data = fifo.read()

if len(data) == 0:

print("Writer closed")

break

print('Read: "{0}"'.format(data))

终端1:$ python reader.py

Opening FIFO...

终端2:$ echo -n 'hello' > mypipe

终端1:FIFO opened

Read: "hello"

Writer closed

Opening FIFO...

终端2:$ echo -n 'hello' > mypipe

终端1:FIFO opened

Read: "hello"

Writer closed

Opening FIFO...

。。。等等。

您可以通过阅读管道的man页了解更多信息:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值