【发布时间】:2015-08-12 10:22:21
【问题描述】:
问题:How do I watch a file for changes using Python? 建议使用看门狗,但我发现它只能看目录,不能看文件。 watchdog-test.py 是看门狗的示例脚本:
$ python watchdog-test.py ab_test_res.sh &
[1] 30628
fbt@fbt64:~/laike9m$ Traceback (most recent call last):
File "watchdog-test.py", line 15, in <module>
observer.start()
File "/usr/local/lib/python2.7/dist-packages/watchdog/observers/api.py", line 255, in start
emitter.start()
File "/usr/local/lib/python2.7/dist-packages/watchdog/utils/__init__.py", line 111, in start
self.on_thread_start()
File "/usr/local/lib/python2.7/dist-packages/watchdog/observers/inotify.py", line 121, in on_thread_start
self._inotify = InotifyBuffer(path, self.watch.is_recursive)
File "/usr/local/lib/python2.7/dist-packages/watchdog/observers/inotify_buffer.py", line 35, in __init__
self._inotify = Inotify(path, recursive)
File "/usr/local/lib/python2.7/dist-packages/watchdog/observers/inotify_c.py", line 187, in __init__
self._add_dir_watch(path, recursive, event_mask)
File "/usr/local/lib/python2.7/dist-packages/watchdog/observers/inotify_c.py", line 363, in _add_dir_watch
raise OSError('Path is not a directory')
OSError: Path is not a directory
那么最好的解决方案是什么?我正在使用 Linux(Ubuntu 12.04)。顺便说一句,我不想使用轮询。
【问题讨论】:
-
什么操作系统?我不确定,但我认为 Windows 只支持观看目录。
-
@ColonelThirtyTwo Linux。
-
查看 inotify linux.die.net/man/7/inotify
-
我能够按照你在 perl 中的要求做同样的事情。我尝试不断寻找文件以进行任何更改,但在每次寻找之间都休息一下。这将有助于减少系统负载。如果你想要我的 perl 解决方案,我可以提供给你。
-
@shivams 这不是轮询,但我正在寻找另一种方式。
标签: python file watch python-watchdog