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

Python 如何从os.pipe()读取而不被阻止?,python,file,pipe,Python,File,Pipe,我正在尝试从一个打开的os.pipe()读取,以查看在读取时它是否为空。问题是调用read()会导致程序在那里阻塞,直到确实有东西要读为止,但是如果我正在做的测试成功了,就不会有任何东西 我知道我可以使用带有超时的select.select(),但我想知道是否有其他解决方案。您可以尝试此方法 import os, fcntl fcntl.fcntl(thePipe, fcntl.F_SETFL, os.O_NONBLOCK) 使用此时,管道读取()应该是非阻塞的 从手册页: 如果进程试图从

我正在尝试从一个打开的
os.pipe()
读取,以查看在读取时它是否为空。问题是调用
read()
会导致程序在那里阻塞,直到确实有东西要读为止,但是如果我正在做的测试成功了,就不会有任何东西

我知道我可以使用带有超时的
select.select()
,但我想知道是否有其他解决方案。

您可以尝试此方法

import os, fcntl
fcntl.fcntl(thePipe, fcntl.F_SETFL, os.O_NONBLOCK) 
使用此
时,管道读取()
应该是非阻塞的

从手册页:

如果进程试图从 空管道,则读取(2)将阻塞 直到数据可用。(...) 通过使用 fcntl(2)
F_SETFL
启用
O_非块
打开文件状态 旗帜


非常感谢你。这正是我所需要的。注意:像
.readline()
这样的文件方法可能不需要非阻塞模式。