当前位置:  开发笔记 > 编程语言 > 正文

如何从os.pipe()中读取而不被阻止?

如何解决《如何从os.pipe()中读取而不被阻止?》经验,为你挑选了1个好方法。

我正试图从一个空位阅读os.pipe(),看看它在阅读时是否为空.问题是调用read()会导致程序阻塞,直到实际上有东西可以读取,但是如果我正在进行的测试成功的话就没有.

我知道我可以使用select.select()超时,但我想知道是否有另一个问题的解决方案.



1> vartec..:

你可以试试这个.

import os, fcntl
fcntl.fcntl(thePipe, fcntl.F_SETFL, os.O_NONBLOCK) 

thePipe.read()应该是非阻塞的.

从pipe(7)手册页:

如果进程尝试从空管道读取,则read(2)将阻塞,直到数据可用.(...)通过使用fcntl(2)F_SETFL操作启用O_NONBLOCK打开文件状态标志,可以实现非阻塞I/O.

推荐阅读
ar_wen2402851455
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有