【发布时间】:2019-02-02 11:22:42
【问题描述】:
我想在 Linux 上编写一个 Python 程序,它可以在写入日志文件时实时读取它,以便在它检测到日志中的某些内容时发送警报。我希望它使用 asyncio 有几个原因 - 我正在尝试构建一个基于 asyncio 同时执行许多操作的框架,我需要练习。
由于我使用的是 asyncio,我显然不想使用阻塞读取在输入文件的末尾等待更多行写入。我怀疑我最终将不得不使用 select,但我不确定。
我怀疑这很简单,但我很难找到一个如何做到这一点的例子,或者想出一个我自己的例子,即使我以前涉足过 asyncio。我可以阅读并基本理解我找到的其他 asyncio 示例,但由于某种原因,我发现自己编写 asyncio 代码很困难。
因此,如果有人能给我举个例子,我将不胜感激。如果同样的技术也适用于从标准输入而不是文件读取,则加分。
【问题讨论】:
-
with open()支持这一点。每个新的read()将从文件中的最后一个光标位置继续。如果有新数据,read()将获取它。f.tell()会告诉你你在文件中的位置。 -
select可能是您最好的选择,或者检查文件的os.stat(f).m_time。或者,使用here 中提到的一种方法来确定您应该何时进行阅读。我不是 asyncio 的忠实粉丝,但也许值得一看。 -
不会
read()立即返回EOF,还是什么? -
相信你,小家伙:i.imgur.com/IHmrCyu.png(注意末尾的 6,
read()没有阻塞。它将继续返回f.data[f.curpos:],在次。 -
我明白了,谢谢。是的,我想这是可行的。我原以为我会使用'await fh.async_read()'之类的东西。
标签: python linux file-io python-asyncio