如何使用 Ctrl-C 退出使用 MacFSEvents 的 Python 程序

发布于 2024-10-31 06:01:03 字数 494 浏览 1 评论 0原文

我正在使用 MacFSEvents,这是一个 Python 库,用于监视 Mac OS X 上目录的更改,如下所示:

# from http://pypi.python.org/packages/source/M/MacFSEvents/
from fsevents import Observer
from fsevents import Stream
observer = Observer()

def callback(event):
    print event.name

stream = Stream(callback, '.', file_events=True)
observer.schedule(stream)
observer.start()

当我在终端中运行此脚本时,按 Ctrl-C 不会退出程序 - 这是我能找到的唯一方法要杀死它,可以在单独的窗口中使用“kill”,或者使用活动监视器等。

关于如何使这样的程序可以通过 Ctrl-C 杀死,有什么想法吗?

I'm using MacFSEvents, a Python library that monitors a directory for changes on Mac OS X, like so:

# from http://pypi.python.org/packages/source/M/MacFSEvents/
from fsevents import Observer
from fsevents import Stream
observer = Observer()

def callback(event):
    print event.name

stream = Stream(callback, '.', file_events=True)
observer.schedule(stream)
observer.start()

When I run this script in the Terminal, hitting Ctrl-C doesn't exit the program -- the only way I can find to kill it is with 'kill' in a separate window, or with Activity Monitor, etc.

Any ideas on how to make such a program killable by Ctrl-C?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

挽清梦 2024-11-07 06:01:03

顺便说一下,答案是鲜为人知的 Ctrl-\,它向进程发送 SIGQUIT,并且无论挂起的程度如何都会退出它。

The answer, by the way, is the little known Ctrl-\, which sends SIGQUIT to the process, and will quit it no matter how hung.

十年九夏 2024-11-07 06:01:03

另一种方法是查找KeyboardInterrupt并手动停止观察者(作为observer.run()的替代方法):

def better_run(observer):
   try:
      observer.start()
      while True:      # instead of this infinite loop, you can do
         pass          # whatever processing you wanted
   except KeyboardInterrupt:
      observer.stop()

An alternative is to look for KeyboardInterrupt and stop the observer manually (as an alternative to observer.run()):

def better_run(observer):
   try:
      observer.start()
      while True:      # instead of this infinite loop, you can do
         pass          # whatever processing you wanted
   except KeyboardInterrupt:
      observer.stop()
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文