当前位置: 首页 > 面试题库 >

在Python中读取具有超时的文件

辛盛
2023-03-14
问题内容

在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 2.7读取超时?

也就是说,我要指示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


 类似资料:
  • 我正在运行一个程序,可以处理30000个类似的文件。他们中的一些人正在停止并产生这个错误...

  • 我目前正在学习Python,遇到了以下错误: 这是我的代码: 为什么会出现这种情况?

  • 问题内容: 是否可以用Python读取二进制MATLAB .mat文件? 我已经看到SciPy声称支持读取.mat文件,但是我没有成功。我安装了SciPy 0.7.0版,但找不到该方法。 问题答案: 需要导入,…

  • 我需要知道如何读取(同步或异步不重要)与超时。我想检查一个设备是否与串行端口连接。 为此,我使用,然后等待设备的响应。 如果连接了设备工作正常,但如果没有设备,程序就会停止,这就是我需要超时的原因

  • 问题内容: 这是一个基于客户端/服务器的简单ping / pong程序。不幸的是,IT无法正常工作并显示以下错误消息: 它停止在CLIENT TASK 30行,实际上,客户端不读取服务器已发送的内容。这里的代码: 服务器 服务器任务 客户 客户任务 问题答案: 问题出在循环内部的使用与从连接另一端处理套接字的方式之间的交互。 仅当从其读取的流结束时才返回-1,这在本质上将意味着套接字已关闭。在关闭

  • 我试图读取CSV文件,但它抛出了一个错误。我无法理解我的语法有什么问题,或者我是否需要向我的read_csv添加更多属性。 我试了一下这个解决办法 UnicodeDecodeError:“utf-8”编解码器无法解码位置21中的字节0x96:起始字节也无效。但它不起作用 [错误] UnicodeDecodeError回溯(最近一次调用)pandas/_libs/解析器。大熊猫中的pyx_图书馆。解