在Python中读取具有超时的文件
在Linux中,有一个文件,/sys/kernel/debug/tracing/trace_pipe
顾名思义就是管道。因此,假设我想使用Python从中读取前50个字节,然后运行以下代码:
$sudo python -c 'f=open("/sys/kernel/debug/tracing/trace_pipe","r"); print f; print f.read(50); f.close()<br><open file '/sys/kernel/debug/tracing/trace_pipe', mode 'r' at 0xb7757e90>
我们可以看到打开文件的速度很快(如果拥有超级用户权限)-但是,如果trace_pipe
那时文件为空,它将简单地阻塞(即使有内容,内容也将被转储,直到没有内容为止)。更多内容,然后该文件将再次阻止)。然后我必须按Ctrl
-
C
用KeyboardInterrupt
… 中断Python脚本。
也就是说,我要指示Python “尝试从该文件读取50个字节;如果一秒钟后未成功,则放弃并返回” ?
回答:
采用
os.read(f.fileno(), 50)
代替。这不会等到已读取指定的字节数,而是在读取任何内容(最多指定的字节数)后返回。
万一您 没有 从该管道读取的内容,这不能解决您的问题。在这种情况下,您应该使用select
模块中的内容select
来 测试
是否有需要阅读的内容。
编辑:
使用以下命令测试空输入select
:
import selectr, w, e = select.select([ f ], [], [], 0)
if f in r:
print os.read(f.fileno(), 50)
else:
print "nothing available!" # or just ignore that case
以上是 在Python中读取具有超时的文件 的全部内容, 来源链接: utcz.com/qa/402324.html