2016-07-21 6 views
0

私はpythonのpyinotifyを使って時計を追加しようとしていて、通知機能をデーモン化しています。私は見つけることができるしかしpyinotifyデーモン化のためにstdoutをファイルに追加するには?

notifier = pyinotify.Notifier(wm, handler) 
notifier.loop(daemonize=True, pid_file='/tmp/pyinotifier.pid', 
       stdout='/tmp/out.log', stderr='/tmp/error.log') 

、ログファイルは、添付の届かない上書きされます。 stdoutstderrを追加する方法はありますか? 私はLinux OSを使用しています。

おかげ

答えて

0

the sourceを見るとログは、あなたは彼らがあなたがループを起動するたびに上書きされて見る理由である、O_WRONLYモードでオープンされているかのように、表示されます。

def __daemonize(self, pid_file=None, stdin=os.devnull, stdout=os.devnull, 
       stderr=os.devnull): 
    """ 
    @param pid_file: file where the pid will be written. If pid_file=None 
        the pid is written to 
        /var/run/<sys.argv[0]|pyinotify>.pid, if pid_file=False 
        no pid_file is written. 
    @param stdin: 
    @param stdout: 
    @param stderr: files associated to common streams. 
    """ 
    if pid_file is None: 
     dirname = '/var/run/' 
     basename = os.path.basename(sys.argv[0]) or 'pyinotify' 
     pid_file = os.path.join(dirname, basename + '.pid') 

    if pid_file != False and os.path.lexists(pid_file): 
     err = 'Cannot daemonize: pid file %s already exists.' % pid_file 
     raise NotifierError(err) 

    def fork_daemon(): 
     # Adapted from Chad J. Schroeder's recipe 
     # @see http://code.activestate.com/recipes/278731/ 
     pid = os.fork() 
     if (pid == 0): 
      # parent 2 
      os.setsid() 
      pid = os.fork() 
      if (pid == 0): 
       # child 
       os.chdir('/') 
       os.umask(022) 
      else: 
       # parent 2 
       os._exit(0) 
     else: 
      # parent 1 
      os._exit(0) 

     fd_inp = os.open(stdin, os.O_RDONLY) 
     os.dup2(fd_inp, 0) 
     fd_out = os.open(stdout, os.O_WRONLY|os.O_CREAT, 0600) 
     os.dup2(fd_out, 1) 
     fd_err = os.open(stderr, os.O_WRONLY|os.O_CREAT, 0600) 
     os.dup2(fd_err, 2) 

    # Detach task 
    fork_daemon() 

    # Write pid 
    if pid_file != False: 
     flags = os.O_WRONLY|os.O_CREAT|os.O_NOFOLLOW|os.O_EXCL 
     fd_pid = os.open(pid_file, flags, 0600) 
     os.write(fd_pid, str(os.getpid()) + '\n') 
     os.close(fd_pid) 
     # Register unlink function 
     atexit.register(lambda : os.unlink(pid_file)) 

ありpull requestを開き、O_APPENDモードでログを開きますが、それは8ヶ月近く経過しており、作成者は応答していません。

現時点でログを追加する方法は妥当ではないようです。

+0

ありがとうございます。ループを呼び出す前に、タイムスタンプでログファイルの名前を変更します。 – SKRP

関連する問題