0

天,

我有一个 Raspberry Pi,它将用于在连接 HDMI 的显示器上显示事务日志 CSV 文件。我希望显示器作为实时“记分牌”运行,这样用户只能看到日志 CSV 文件(如机场/航班公告板)。

有人告诉我,pyinotify 可以监控日志 CSV 文件,然后刷新文件,而不必关闭并重新打开它?我已经阅读了文档,并在网上搜索了这个功能,但到目前为止我还是一无所获。我没有任何示例代码来演示我已经尝试过的东西(还没有!),因为我想首先确定这个功能是否可以通过 pyinotify 实现,或者我是否应该看其他东西。

我正在使用 Python 3.3。

这里的任何指导都会很棒!

谢谢!

4

1 回答 1

1

好的,我不知道它是否会有所帮助,但在这里你可以如何做到:

假设我们有一个文件:

echo "line 1" >> testfile.txt 

比写一个脚本(确保你指向这个文件):

import os, pyinotify

PATH = os.path.join(os.path.expanduser('~/'), 'testfile.txt')

class EventHandler(pyinotify.ProcessEvent):
    def __init__(self, *args, **kwargs):
        super(EventHandler, self).__init__(*args, **kwargs)
        self.file = open(PATH)
        self.position = 0
        self.print_lines()

    def process_IN_MODIFY(self, event):
        self.print_lines()

    def print_lines(self):
        new_lines = self.file.read()
        last_n = new_lines.rfind('\n')
        if last_n >= 0:
            self.position += last_n + 1
            print new_lines[:last_n]
        else:
            print 'no line'
        self.file.seek(self.position)

wm = pyinotify.WatchManager()
handler = EventHandler()
notifier = pyinotify.Notifier(wm, handler)
wm.add_watch(PATH, pyinotify.IN_MODIFY, rec=True)
notifier.loop()

运行文件:

python notify.py

你会看见

line 1

比从不同终端添加另一行到文件(确保脚本仍在运行)

echo "line 2" >> testfile.txt

你会在脚本输出中看到它

此代码的 PS 归功于Nicolas Cartot

于 2013-07-24T01:25:41.767 回答