如何将stdout追加到pyinotify守护进程的文件中?

问题描述:

我想添加手表使用python pyinotify和daemonize通知程序。如何将stdout追加到pyinotify守护进程的文件中?

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

但是我可以发现,日志文件被覆盖不会被追加。 有没有办法追加stdoutstderr? 我在Linux操作系统上。

感谢

看着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