gpt4 book ai didi

python - 在python中尾部多个日志文件

转载 作者:太空狗 更新时间:2023-10-30 01:49:33 25 4
gpt4 key购买 nike

这对我来说可能有点愚蠢,但它提出了很多有趣的问题。我有一个来自聊天客户端的日志文件目录,每次其中一个发生更改时,我都希望使用 notify-osd 得到通知。

我编写的脚本基本上使用 os.popen 在每个文件上运行 linux tail 命令以获取最后一行,然后根据上次运行时的行字典检查每一行。如果线路发生变化,它会使用 pynotify 向我发送通知。

这个脚本实际上运行得很好,除了它使用了大量的 cpu(可能是因为它在每次循环运行时在通过 sshfs 挂载的文件上运行 tail 大约 16 次。)

好像是this将是一个很好的解决方案,但我不知道如何为多个文件实现它。

Here是我写的脚本。请原谅我缺乏评论和糟糕的风格。

编辑:澄清一下,这都是桌面上的 Linux。

最佳答案

即使不查看您的源代码,也有两种方法可以让您更轻松地更高效地执行此操作并处理多个文件。

  1. 除非万不得已,否则不要费心跑尾部。只需 os.stat 所有文件并记录最后修改时间。如果上次修改时间不同,则发出通知。

  2. 使用 pyinotify调用 Linux 的 inotify设施;这将使内核为您执行选项 1,并在目录中的任何文件更改时回调给您。然后将回调转换为您的 OSD 通知。

现在,可能会有一些棘手的问题,具体取决于有多条消息时您需要多少条通知,以及您是否关心错过某条消息的通知。

保留使用 tail 的方法是改为使用 tail -f。使用 tail -f 打开所有文件,然后使用 select 模块让操作系统在为 打开的文件描述符之一上有附加输入时通知您尾-f。您的主循环将调用 select,然后遍历每个可读描述符以生成通知。 (您可以不使用 tail 并在可读时调用 readline() 来执行此操作。)

脚本中其他需要改进的地方:

  • 使用 os.listdir 和 native Python 过滤(例如,使用列表理解),而不是带有一堆 grep 过滤器的 popen
  • 更新缓冲区列表以定期扫描,而不是仅在程序启动时执行。
  • 使用 subprocess.popen 代替 os.popen

关于python - 在python中尾部多个日志文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5725051/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com