2015-06-02 2 views
1

Я успешно daemonize мой код python, используя Sander Marechal's code sample. Теперь я хочу записать stdout в файл журнала, но не удалось. Как я запустил stdout после daemonize? Вот мой код:Как я запустил stdout после daemonize?

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 
import zerorpc, zmq 
import os, sys, time 
from daemon import Daemon 

class RunTestCase(zerorpc.Subscriber): 
    def __init__(self, domain, *args, **kwargs): 
     super(RunTestCase, self).__init__(*args, **kwargs) 
     self.domain = domain 

    def add(self, domain, testcase_pk, testresult_pk): 
     print domain, testcase_pk, testresult_pk 
     if domain == self.domain: 
      print "NAT Got it" 

class subscriberd(Daemon): 
    domain = "" 
    def run(self): 
     # Start RPC Server 
     s = RunTestCase(self.domain) 
     s._events.setsockopt(zmq.TCP_KEEPALIVE, 1) 
     s.connect("tcp://192.168.77.170:8888") 
     s.run() 

if __name__ == "__main__": 
    daemon = subscriberd('/tmp/subscriber.pid', stdout='/tmp/subscriber.log') 
    #I add stdout here but /tmp/subscriber.log still empty after test. 
    daemon.domain = sys.argv[1] 

    if len(sys.argv) == 3: 
     if 'start' == sys.argv[2]: 
      daemon.start() 
     elif 'stop' == sys.argv[2]: 
      daemon.stop() 
     elif 'restart' == sys.argv[2]: 
      daemon.restart() 
     else: 
      print "Unknown command" 
      sys.exit(2) 
     sys.exit(0) 
    else: 
     print "usage: %s domain start|stop|restart" % sys.argv[0] 
     print "ex: %s KS-1 start" % sys.argv[0] 
     sys.exit(2) 
+1

вы пробовали 'logging' модуль питона стандартной библиотеки ? Честно говоря, я не думаю, что использование 'print' и перенаправление его в файл - лучший способ сделать фактический журнал. – skyline75489

+0

Доступно несколько модулей регистрации. Выберите один. BTW, не «подписчик» опечатка? – JBernardo

+0

Попробуйте напечатать что-нибудь в stdout (например, 'print 'start') перед вызовом' daemon.start() '. Я не знаю почему, но это устранит проблему. – mhawke

ответ

Смежные вопросы