Maison > développement back-end > Tutoriel Python > Comment puis-je dupliquer la sortie d'une application Python (y compris les appels système) vers la console et un fichier journal ?

Comment puis-je dupliquer la sortie d'une application Python (y compris les appels système) vers la console et un fichier journal ?

Susan Sarandon
Libérer: 2024-11-29 08:24:14
original
239 Les gens l'ont consulté

How Can I Duplicate Python Application Output (Including System Calls) to Both the Console and a Log File?

Redirection et duplication de la sortie vers un fichier journal

Vous aspirez à obtenir la fonctionnalité de l'utilitaire de ligne de commande 'tee', où toutes les sorties généré par votre application Python, y compris la sortie de l'appel système, est dupliqué dans un journal file.

Redirection

Votre approche initiale impliquait la duplication des descripteurs de fichier de sys.stdout et sys.stderr vers le fichier journal, qui redirige avec succès la sortie vers la connexion mode démon. Cependant, cette méthode ne fonctionne pas en mode interactif car elle entrave l'affichage simultané de la sortie à l'écran.

Duplication

Pour réaliser la duplication, il suffit d'inverser les appels dup2. pas suffisant. Au lieu de cela, vous pouvez utiliser une technique qui intercepte sys.stdout et duplique les données écrites à la fois sur l'écran et dans le fichier journal.

Solution

L'extrait ci-dessous fournit un solution élégante :

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()
Copier après la connexion

Cette classe encapsule la duplication du descripteur de fichier et offre un moyen transparent d'écrire dans les deux sys.stdout et le fichier journal. Vous pouvez initialiser une instance de Tee et transmettre les détails du fichier journal sous forme d'arguments. L'instance devient alors le nouveau sys.stdout.

Conclusion

En utilisant cette méthode, vous pouvez réaliser à la fois la redirection (en mode démon) et la duplication (en mode interactif ) de toutes les sorties de l'application, y compris les sorties des appels système, dans un fichier journal.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal