微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我可以在Linux上打开一个命名pipe道用于在Python中进行非阻塞写入吗?

我使用mkfifo创build了一个fifo文件。 是否可以打开/写入这个没有阻止? 我想不pipe是否有读者都不知道。

下列:

with open('fifo','wb',0) as file: file.write(b'howdy')

直到我从另一个壳上做了一个cat fifo 。 无论有没有数据消费者观看,我都希望我的程序能够取得进展。

有没有我应该使用的不同的Linux机制?

在Ubuntu 14.04上安装genymotion?

NPM隧道套接字问题(Linux Redhat 6和ATOM.io构build)

如何在Ubuntu 14.04中安装节点Linux二进制文件(.tar.xz)文件

如何将参数(这是一个命令,而不是文件名)传递给使用execve的新shell?

蓝牙:使用蓝牙检测事件

使用MIT Kerberos作为Windows AD域的帐户域

validation失败

从命令行Linux运行Java程序

GDB错误:选定的架构i386与报告的目标架构i386:x86-64不兼容

gdb回溯行走帧指针

从man 7 fifo :

进程可以在非阻塞模式下打开一个FIFO。 在这种情况下,即使没有人打开写入端,打开或只读也会成功,除非另一端已经打开,否则打开只写将失败,ENXIO(没有这样的设备或地址)。

所以第一个解决方案是用O_NONBLOCK打开FIFO。 在这种情况下,您可以检查errno :如果它等于ENXIO ,那么您可以稍后尝试打开FIFO。

import errno import posix try: posix.open('fifo',posix.O_WRONLY | posix.O_NONBLOCK) except OSError as ex: if ex.errno == errno.ENXIO: pass # try later

另一种可能的方法是用O_RDWR标志打开FIFO。 在这种情况下它不会阻塞。 其他进程可以用O_RDONLY打开它没有问题。

import posix posix.open('fifo',posix.O_RDWR)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐