打破 pyinotify 通知程序循环
Break pyinotify notifier loop
我正在使用 pyinotify.notifier
来跟踪文本文件中的更改。
当我得到其中的特定更改时,我想打破通知程序循环。通过使用 notifier.stop()
似乎不起作用。
这是我正在尝试做的事情:
class ModHandler(pyinotify.ProcessEvent):
def process_IN_MODIFY(self, evt):
#... Do Stuff
if "Expected change":
#break notifier loop
if __name__ == "__main__":
handler = ModHandler()
wm = pyinotify.WatchManager()
notifier = pyinotify.Notifier(wm, handler)
wdd = wm.add_watch('example.file', pyinotify.IN_MODIFY)
notifier.loop()
#when finished the loop, do more stuff
如何打破线程循环并return到主程序?
notifier.loop()
The call to this method is blocking until we type c-c
(sigint)
这就是您需要做的。 发送一个信号。
一些方法:
- How to send a SIGINT to Python from a bash script?
- How to pass SIGINT to child process with Python subprocess.Popen() using shell = true
- Send SIGINT in python to os.system
- Send SIGINT to Python subprocess using os.kill as if pressing Ctrl+C
从 0.9.0 版本开始,您可以通过传递回调函数来停止通知程序循环。当评估为 True 时,中断循环并停止通知程序。
https://github.com/seb-m/pyinotify/wiki/Recent-Developments#changes-introduced-with-pyinotify-090
我正在使用 pyinotify.notifier
来跟踪文本文件中的更改。
当我得到其中的特定更改时,我想打破通知程序循环。通过使用 notifier.stop()
似乎不起作用。
这是我正在尝试做的事情:
class ModHandler(pyinotify.ProcessEvent):
def process_IN_MODIFY(self, evt):
#... Do Stuff
if "Expected change":
#break notifier loop
if __name__ == "__main__":
handler = ModHandler()
wm = pyinotify.WatchManager()
notifier = pyinotify.Notifier(wm, handler)
wdd = wm.add_watch('example.file', pyinotify.IN_MODIFY)
notifier.loop()
#when finished the loop, do more stuff
如何打破线程循环并return到主程序?
notifier.loop()
The call to this method is blocking until we typec-c
(sigint)
这就是您需要做的。 发送一个信号。 一些方法:
- How to send a SIGINT to Python from a bash script?
- How to pass SIGINT to child process with Python subprocess.Popen() using shell = true
- Send SIGINT in python to os.system
- Send SIGINT to Python subprocess using os.kill as if pressing Ctrl+C
从 0.9.0 版本开始,您可以通过传递回调函数来停止通知程序循环。当评估为 True 时,中断循环并停止通知程序。
https://github.com/seb-m/pyinotify/wiki/Recent-Developments#changes-introduced-with-pyinotify-090