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)
вы пробовали 'logging' модуль питона стандартной библиотеки ? Честно говоря, я не думаю, что использование 'print' и перенаправление его в файл - лучший способ сделать фактический журнал. – skyline75489
Доступно несколько модулей регистрации. Выберите один. BTW, не «подписчик» опечатка? – JBernardo
Попробуйте напечатать что-нибудь в stdout (например, 'print 'start') перед вызовом' daemon.start() '. Я не знаю почему, но это устранит проблему. – mhawke