2016-09-19 10 views
2

私のpython-デーモンの古いバージョンを使用して作成した基本的なPythonのデーモンと、このコードを持っている:python-daemonにコマンド引数を追加するには?

import time 
from daemon import runner 

class App(): 
    def __init__(self): 
     self.stdin_path = '/dev/null' 
     self.stdout_path = '/dev/tty' 
     self.stderr_path = '/dev/tty' 
     self.pidfile_path = '/tmp/foo.pid' 
     self.pidfile_timeout = 5 
    def run(self): 
     while True: 
      print("Howdy! Gig'em! Whoop!") 
      time.sleep(10) 

app = App() 
daemon_runner = runner.DaemonRunner(app) 
daemon_runner.do_action() 

今、すべてが正常に動作しますが、私はデーモンに1以上の可能なコマンドを追加する必要があります。現在のデフォルトのコマンドは、 "start、stop、restart"です。私は、実行時にのみ、このコードを実行します4番目のコマンド「mycommand」が必要:

my_function() 
print "Function was successfully run!" 

私はグーグルと研究を試みたが自分でそれを把握することができませんでした。私はsys.argvでPythonデーモンコードに沈んでいないのに手作業で引数を取り出そうとしましたが、動作させることができませんでした。

+0

これはこれまでに動作しましたか?リカルドの解決策を試しましたか? –

答えて

0

ランナーモジュールのコードを見ると、次のように動作するはずです... stdoutとstderrの定義に問題があります。テストできますか?

from daemon import runner 
import time 

# Inerith from the DaemonRunner class to create a personal runner 
class MyRunner(runner.DaemonRunner): 

    def __init__(self, *args, **kwd): 
     super().__init__(*args, **kwd) 

    # define the function that execute your stuff... 
    def _mycommand(self): 
     print('execute my command') 

    # tell to the class how to reach that function 
    action_funcs = runner.DaemonRunner.action_funcs 
    action_funcs['mycommand'] = _mycommand 


class App(): 
    def __init__(self): 
     self.stdin_path = '/dev/null' 
     self.stdout_path = '/dev/tty' 
     self.stderr_path = '/dev/tty' 
     self.pidfile_path = '/tmp/foo.pid' 
     self.pidfile_timeout = 5 
    def run(self): 
     while True: 
      print("Howdy! Gig'em! Whoop!") 
      time.sleep(10) 

app = App() 
# bind to your "MyRunner" instead of the generic one 
daemon_runner = MyRunner(app) 
daemon_runner.do_action() 
関連する問題