在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-

CKeyboardInterrupt… 中断Python脚本。

也就是说,我要指示Python “尝试从该文件读取50个字节;如果一秒钟后未成功,则放弃并返回”

回答:

采用

os.read(f.fileno(), 50)

代替。这不会等到已读取指定的字节数,而是在读取任何内容(最多指定的字节数)后返回。

万一您 没有 从该管道读取的内容,这不能解决您的问题。在这种情况下,您应该使用select模块中的内容select测试

是否有需要阅读的内容。

编辑:

使用以下命令测试空输入select

import select

r, 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

回到顶部