2013-02-07 2 views
0

Mon script se connecte à un fichier sans problème jusqu'à ce que j'essaie de le faire passer en arrière-plan, point auquel le gestionnaire de fichiers est fermé, même si j'utilise filesPreserve. Comment puis-je améliorer cela de façon légère afin que mon enregistreur fonctionne en arrière-plan?Le démon de journalisation Python détruit le gestionnaire de fichiers

#!/usr/bin/env python 

from socket import *  
import sys, time, logging 
import daemon 

context = daemon.DaemonContext() 

logger = logging.getLogger('audit') 
hdlr = logging.FileHandler('/mnt/audit.log') 
formatter = logging.Formatter('%(asctime)s %(message)s') 
hdlr.setFormatter(formatter) 
logger.addHandler(hdlr) 
logger.setLevel(logging.WARNING) 

context.filesPreserve = [hdlr] 

with context: 
    HOST = ''  
    PORT = 50007  
    ADDR = (HOST,PORT) 
    BUFSIZE = 4096 #reasonably sized buffer for data 

    serv = socket(AF_INET,SOCK_STREAM) 
    serv.bind((ADDR))  
    serv.listen(5) #5 is the maximum number of queued connections we'll allow 

    while True: 
     conn, addr = serv.accept() 

    sys.stdout.write('accepted connection') 

    while True: 
     data = conn.recv(1024) 
     if not data: 
      break 
     else: 
      logger.error ("-" * 20) 
      logger.error(data) 
      if "DONE" == data: 
      break 
    conn.close() 
+0

Je n'ai pas un système de type Unix pour tester ceci, donc je ne peux pas beaucoup d'aide. Au début, j'étais un peu confus car cette question semble être le seul hit Google pertinent pour «Python filesPreserve» (si vous persuadez Google de ne pas le répéter). C'est une propriété d'un objet 'DaemonContext' du module' daemon' de Python, documenté dans [PEP 3143] (http://www.python.org/dev/peps/pep-3143/). – Blckknght

Répondre

1

Qu'est-ce que vous voulez est:

context.files_preserve = [hdlr.stream] 

Depuis files_preserve un gestionnaire de attend fichier.

Vous pouvez voir plus d'informations here

Questions connexes