2010-11-03 24 views
4

J'ai un programme Python composé de plusieurs modules. Le module "principal" crée une variable de fichier log_file pour consigner la sortie; tous les autres modules devraient également écrire dans ce fichier.où stocker un nom de fichier journal en python?

Cependant, je ne veux pas importer le module "principal" dans d'autres modules, car ce serait une dépendance vraiment bizarre (sans parler du fait qu'il pourrait même ne pas fonctionner en raison d'une dépendance circulaire).

Où puis-je stocker la variable log_file?

EDIT:

Après réponse @pyfunc - serait-ce ok:

--- config.py --- 
# does not mention log_file 
# unless it's required for syntax reasons; in which case log_file = None 
# ... 

--- main.py --- 
from datetime import datetime 
import config.py 
log_filename = str(datetime.now()) + '.txt' 
config.log_file = open(log_filename, 'w') 
# ... 

--- another_module.py --- 
import config.py 
# ... 
config.log_file.write(some_stuff) 
+0

Il ne semble pas y avoir de py3k spécifique dans cette question. – SilentGhost

+2

Je vous recommande d'utiliser le package de consignation avec les fichiers de configuration au lieu de la solution personnalisée. –

+0

Je suis juste en train d'imprimer la sortie, pas d'erreurs. Je suppose que je pourrais toujours utiliser le paquet de journalisation ... Bien que je pensais que c'est une surcharge, où j'ai juste besoin d'imprimer des choses dans un fichier. – max

Répondre

2

Mettre la variable "globale" dans un module "Paramètres".

settings.py

log_file = "/path/to/file" 

main.py

import settings 
import logging 
logging.basicConfig(filename=settings.log_file,level=logging.DEBUG) 

logging.debug("This should go to the log file") 

other_module.py

import logging 
logging.debug("This is a message from another place.") 

Alors que le logging module peut résoudre votre problème immédiat et bien d'autres, les paramètres configuration du module est utile pour beaucoup d'autres choses, à part les noms de fichiers journaux. Il est utilisé par Django pour configurer à peu près tout.

+0

C'est ce que je pense faire (dans config.py dans mon code édité ci-dessus), mais je dois assigner le nom de fichier dans main.py je pense que cela dépend de l'heure à laquelle le script est appelé. Config.py sera importé plusieurs fois et je ne veux donc pas continuer à changer le nom du fichier. – max

+0

Dans votre exemple, fichier_journal ne doit pas nécessairement être une variable globale, car le module de journalisation prendra le relais. Mais je comprends l'idée. – max