【问题标题】:How to exit from a Python program using MacFSEvents using Ctrl-C如何使用 Ctrl-C 退出使用 MacFSEvents 的 Python 程序
【发布时间】:2011-04-09 19:31:51
【问题描述】:

我正在使用 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 杀死的任何想法?

【问题讨论】:

    标签: python macos


    【解决方案1】:

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

    【讨论】:

    • 实际上,由于某种原因,对于这个特定问题不起作用,即使您使用 signal 捕获事件:`(python)10:23:52 (~/src/work/广播/脚本/python) todd@megabarley> python filewatcher.py /tmp/test1 /tmp/test2 ^\^`
    • 它确实对我有用,有点。但是,它并没有完全退出,而是崩溃了,导致 OSX 弹出“Python 意外退出”对话框。不过,这仍然比使用kill 方便一些。
    【解决方案2】:

    另一种方法是查找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()
    

    【讨论】:

      猜你喜欢
      • 2017-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-12
      • 1970-01-01
      • 2020-02-18
      • 1970-01-01
      • 2019-03-19
      相关资源
      最近更新 更多