[Verständnis und Anwendung mit Syntax] Flexibles Umschalten des Python-Standardausgabeziels

Ich werde vorstellen, wie das Ausgabeziel (Dateiausgabe, Konsolenausgabe) der Python-Standardausgabe (print und sys.stdout) verwendet wird, während mit Syntax entsprechend umgeschaltet wird.

Motivation

Sie können das Ausgabeziel der Standardausgabe entsprechend der Verarbeitung ändern, indem Sie folgende Schritte ausführen:

import sys
#Vorübergehend zur Dateiausgabe wechseln
sys.stdout = open('out.log', 'a+')

...
sys.stdout.write('fugahoge')
...

#Kehren Sie zur Konsolenausgabe zurück
sys.stdout = sys.__stdout__

Als der Prozess abgeschlossen war, fragte ich mich, ob es etwas gab, weil es schwierig wäre, es rückgängig zu machen, und erinnerte mich daran, dass die Verwendung der Syntax with close () nach dem Öffnen der Datei () in diesem Artikel nicht erforderlich war Ich bin gekommen, um zu schreiben.

Was steht in diesem Artikel geschrieben

mit Syntax

Die with-Syntax wird in verschiedenen Situationen verwendet, z. B. beim Lesen und Schreiben von Dateien wie dem folgenden und gradient_tape von Tensorflow.

with open('', 'r') as f:
  f.read()

Referenz: mit Syntax (Python)

Was passiert in der mit Syntax

Wenn Sie die with-Syntax verwenden, wird der Prozess wie folgt ausgeführt, wenn Sie nach with eine Instanz angeben (oder generieren).

  1. Die sofortige Methode `` .__ enter__ () `wird aufgerufen
  2. Verarbeitung in der with-Syntax
  3. Die sofortige Methode `` .__ exit__ () `wird aufgerufen

Codebeispiel

Wenn Sie den folgenden Code ausführen,

class Logger():
    def setIO(self, *args, **kwargs):
        #TestIO-Instanse generieren
        return TestIO(*args, **kwargs)

class TestIO():
    def __enter__(self):
        print('enter')

    def __exit__(self, *args):
        print('exit')

logger = Logger()
with logger.setIO():
    print('---- in with syntax ----')

Die Ausgabe ist wie folgt.

console


enter
---- in with syntax ----
exit

Jetzt können Sie sehen, dass die Verarbeitung in der Reihenfolge `` .__ enter__ () Methode-> Verarbeitung in der with-Syntax-> .__ exit__ () `Methode erfolgt.

Referenz:

Flexibles Umschalten des Standardausgabeziels mit Syntax

Abschließend werde ich ein Codebeispiel für "Flexibles Umschalten des Ausgabeziels der Standardausgabe mit Syntax" vorstellen, das Gegenstand dieses Artikels ist.

import sys

class SetIO():
    """Ich bin mit Syntax/Klasse zum Schalten von O."""
    def __init__(self, filename: str):
        self.filename = filename

    def __enter__(self):
        sys.stdout = _STDLogger(out_file=self.filename)

    def __exit__(self, *args):
        sys.stdout = sys.__stdout__

class _STDLogger():
    """Brauch ich/O"""
    def __init__(self, out_file='out.log'):
        self.log = open(out_file, "a+")

    def write(self, message):
        self.log.write(message)

    def flush(self):
        # this flush method is needed for python 3 compatibility.
        pass

print('before with block')

with SetIO('out.log'):
    #Wechseln Sie zur Dateiausgabe
    print('---- in with syntax ----')

print('after with block')

Wenn ich den obigen Code ausführe, Folgendes wird an die Konsole ausgegeben.

console


before with block
after with block

Anschließend wird Folgendes in die Datei (out.log) ausgegeben.

out.log


---- in with syntax ----

Ich konnte das Standardausgabeziel mit der oben beschriebenen Methode mit Syntax umschalten.

Zusammenfassung

Sie können das Ausgabeziel mithilfe des integrierten Namespace des Logger-Moduls ändern, aber ich finde es unpraktisch, das Ausgabeziel im Detail zu ändern. (Es ist möglich, dass Sie mit Logger einfach nicht vertraut sind.) Daher denke ich, dass es Situationen gibt, in denen die in diesem Artikel vorgestellte Methode verwendet werden kann. Ich hoffe es wird hilfreich für Sie sein!

Refs

Recommended Posts

[Verständnis und Anwendung mit Syntax] Flexibles Umschalten des Python-Standardausgabeziels
UnicodeEncodeError hat Probleme mit der Standardausgabe von Python3
mit Syntax (Python)
Empfängt und gibt die Standardausgabe von Python 2- und Python 3> C-Implementierungen aus
Holen Sie sich die Standardausgabe in Echtzeit mit dem Python-Unterprozess
Ausgabeprotokoll im JSON-Format mit Python-Standardprotokollierung
Grundlagen von Python: Ausgabe
Anwendung von Python 3 vars
[Für Anfänger] Zusammenfassung der Standardeingabe in Python (mit Erklärung)
1. Mit Python gelernte Statistiken 2. Wahrscheinlichkeitsverteilung [Gründliches Verständnis von scipy.stats]
Testen Sie die Standardausgabe mit Pytest
Webanwendung mit Python + Flask ② ③
Vollständiges Verständnis des Python-Debuggens
Webanwendung mit Python + Flask ④
Konvertieren Sie in eine Zeichenfolge, während Sie die Standardausgabe mit dem Python-Unterprozess ausgeben
Ich möchte den Anfang des nächsten Monats mit Python ausgeben
Geben Sie den Inhalt von ~ .xlsx im Ordner mit Python in HTML aus
Lesen Sie die Standardausgabe eines Unterprozesses zeilenweise in Python
[Blender] Liste der Tastenkombinationen für Python Console, die standardmäßig in Blender enthalten sind
Die Geschichte, einen Standardtreiber für db mit Python zu erstellen.
Memorandum beim Ausführen von Python auf EC2 mit Apache
Ich habe versucht, die Liste der Drehzahlen des SSH-Anmeldeziels mit Python + openpyxl in einer Excel-Tabelle auszugeben.
Python: Anwendung des überwachten Lernens (Rückkehr)
Ausgabe in eine CSV-Datei mit Python
Eingabe / Ausgabe mit Python (Python-Lernnotiz ⑤)
Überwachen Sie die Leistung von Python-Anwendungen mit Dynatrace ♪
Machen Sie die Standardausgabe in Python nicht blockierend
Erste Schritte mit Python Grundlagen von Python
Beachten Sie den Python-Codierungsstandard PEP8
[Hinweis] Hallo Weltausgabe mit Python
Unit Test Log Ausgabe mit Python
Lebensspiel mit Python! (Conways Spiel des Lebens)
[Python] Die potenzielle Feldplanung von Python Robotics verstehen
10 Funktionen von "Sprache mit Batterie" Python
Implementierung der Dyxtra-Methode durch Python
RPC mit Standard-Python 3-Modulen
Koexistenz von Python2 und 3 mit CircleCI (1.0)
Anwendungsentwicklung mit Docker + Python + Flask
Anwendung von Python: Datenbereinigung Teil 2: Datenbereinigung mit DataFrame
Plotten Anwenden von Diagrammen mit Schiebereglern
Grundlegendes Studium von OpenCV mit Python
CSV-Ausgabe von Pulsdaten mit Raspberry Pi (Analogeingang mit Python prüfen)
Sofortige Anzeige, erzwungene Anzeige, Blinken des Druckausgabeergebnisses mit Python (hauptsächlich Jupiter)
Ich habe versucht, die Standardrolle neuer Mitarbeiter mit Python zu optimieren
Erläuterung zum Erstellen einer Anwendung zum Anzeigen von Bildern und Zeichnen mit Python