Maison >développement back-end >Tutoriel Python >Comment puis-je dupliquer le sys.stdout de Python dans un fichier journal en mode interactif et démon ?
Dupliquer sys.stdout dans un fichier journal
Dupliquer sys.stdout dans un fichier journal vous permet de capturer toutes les sorties, y compris les appels système , à partir d'une application Python. Malgré sa simplicité, cette tâche pose un défi unique lorsque l'application fonctionne à la fois en mode interactif et en mode démon.
Mode interactif ou mode démon
En mode interactif, vous souhaitez à la fois l'écran et un fichier journal pour recevoir la sortie. Cependant, en mode démon, toutes les sorties doivent être dirigées vers le fichier journal. La fonction os.dup2() fonctionne bien pour rediriger la sortie en mode démon, mais elle ne fournit pas de solution simple pour dupliquer la sortie en mode interactif sans modifier les appels système.
Duplication à l'aide de Tee
Pour surmonter ce problème, vous pouvez utiliser la classe Tee, qui permet de dupliquer la sortie standard dans un fichier journal. Voici un exemple :
class Tee(object): def __init__(self, name, mode): self.file = open(name, mode) self.stdout = sys.stdout sys.stdout = self def __del__(self): sys.stdout = self.stdout self.file.close() def write(self, data): self.file.write(data) self.stdout.write(data) def flush(self): self.file.flush()
Cette classe vous permet de créer une instance Tee qui prend un nom de fichier journal et un mode comme paramètres. La méthode write() duplique la sortie à la fois dans le fichier journal et sur la sortie standard.
Exemple d'implémentation
Pour utiliser la classe Tee :
with Tee('logfile.txt', 'w') as tee: print('Hello world!') os.system('ls -la')
Dans cet exemple, toutes les sorties, y compris l'appel système à « ls -la », seront écrites à la fois sur l'écran et dans le fichier journal. 'logfile.txt'.
Cette solution enregistre efficacement toutes les sorties, y compris les sorties des appels système, sans qu'il soit nécessaire de modifier les appels système individuels.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!