1

小さな通知デーモンを作成しようとしています

pynotify はメイン スレッドで動作しますが、pynotify はデーモンの実行サイクルでは動作しません。メソッド プログラムを表示した後、ここでデーモン サンプルを取得しました

私のデーモン:

import pynotify
import sys, time
from daemon import Daemon
class NotifyDaemon(Daemon):
    def run(self):
        i = 9
        while True:
            pynotify.init('icon-summary-body')
            n = pynotify.Notification('Test', 'text ')
            print 'Test from stdout'# OK but only one message
            n.show() # not OK
            time.sleep(1)
if __name__ == "__main__":
    if not pynotify.init('icon-summary-body'):
        print 'PyNotify init failed!'
        exit(2)
    daemon = NotifyDaemon('/tmp/reminderdaemon.pid', stdout='/dev/stdout')
    if len(sys.argv) == 2:
        if 'start' == sys.argv[1]:
            n = pynotify.Notification('Daemon starts!')#this message is ok
            n.show()# OK
            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)

OS:Ubuntu WM:素晴らしい

抜け道はありますか?PS私の書き間違いをお詫びします。私の母国語ではない英語

4

1 に答える 1

2

デーモン化コードを捨てることができます。起動時に実行されるプロセスが必要な場合は、upstartを使用します。あなたがする必要があるの/etc/init/my_server.confは次のようなものを含むファイルを置くことです:

description "My Server"
author "Dark Daiver dark@dd.com"

start on runlevel [2345]
stop on runlevel [!2345]

respawn

exec python /home/dd/my_server.py 

プロセスが停止した場合も、リスポーンが発生します。

したがって、my_server.pyファイルに含まれているのが次の場合のみです。

import pynotify


if __name__ == "__main__":

   pynotify.init('icon-summary-body')
   n = pynotify.Notification('Test', 'text ')

   while True:
        n.show() # not OK
        time.sleep(1)

これは起動時に開始され、1秒に1回通知が表示されます。

于 2013-01-26T10:33:19.483 に答える