2011-04-09 34 views
2

使用MacFSEvents Python程序退出我使用MacFSEvents,監視在Mac OS X變化的目錄,如這樣一個Python庫:如何從使用Ctrl-C

# 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不會退出程序 - 我可以找到殺死它的唯一方法是在單獨的窗口中或使用活動監視器等「殺死」。

任何想法如何通過Ctrl-C來製作這樣的程序?

回答

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() 
3

順便說一句,答案是鮮爲人知的Ctrl- \,它將SIGQUIT發送到進程,並且不管它有多懸掛都會退出。

+0

實際上,對於此問題不起作用由於某種原因,甚至當你捕捉事件使用'signal':'(python)10:23:52(〜/ src/work/broadcastr/scripts/python) todd @ megabarley> python filewatcher.py /tmp/test1/tmp/test2 ^ \^\ ' – tkone 2012-03-31 14:27:37

+0

它確實對我有用,有點。然而,它不會乾脆地退出,它會崩潰,導致OSX彈出一個「Python意外退出」對話框。不過,這比使用'kill'稍微方便一些。 – CoreDumpError 2012-06-14 23:02:33