web-dev-qa-db-de.com

Leiten der Druckausgabe an eine TXT-Datei in Python 3

Gibt es eine Möglichkeit, die gesamte Druckausgabe in Python in einer TXT-Datei zu speichern? Nehmen wir an, ich habe diese beiden Zeilen in meinem Code und möchte die Druckausgabe in einer Datei namens output.txt speichern.

print ("Hello stackoverflow!")
print ("I have a question.")

Ich möchte die output.txt-Datei enthalten

Hello stackoverflow!
I have a question.
20
Clone

Geben Sie print ein file-Schlüsselwortargument, wobei der Wert des Arguments ein Dateistream ist. Wir können einen Dateistream mit der Funktion open erstellen:

print("Hello stackoverflow!", file=open("output.txt", "a"))
print("I have a question.", file=open("output.txt", "a"))

Aus der Python-Dokumentation zu print :

Das Argument file muss ein Objekt mit einer write(string)-Methode sein. Wenn es nicht vorhanden ist oder None, wird sys.stdout verwendet.

Und die Dokumentation für open :

Öffnen Sie file und geben Sie ein entsprechendes Dateiobjekt zurück. Wenn die Datei nicht geöffnet werden kann, wird eine OSError ausgelöst.

Der "a" als zweites Argument von open bedeutet "Anhängen" - der vorhandene Inhalt der Datei wird also nicht überschrieben. Wenn Sie die Datei stattdessen überschreiben möchten, verwenden Sie "w".

44

Sie können stdout in eine Datei "output.txt" umleiten:

import sys
sys.stdout = open('output.txt','wt')
print ("Hello stackoverflow!")
print ("I have a question.")
9

Verwenden Sie das Protokollierungsmodul

def init_logging():
    rootLogger = logging.getLogger('my_logger')

    LOG_DIR = os.getcwd() + '/' + 'logs'
    if not os.path.exists(LOG_DIR):
        os.makedirs(LOG_DIR)
    fileHandler = logging.FileHandler("{0}/{1}.log".format(LOG_DIR, "g2"))
    rootLogger.addHandler(fileHandler)

    rootLogger.setLevel(logging.DEBUG)

    consoleHandler = logging.StreamHandler()
    rootLogger.addHandler(consoleHandler)

    return rootLogger

Holen Sie sich den Logger:

logger = init_logging()

Und starten Sie die Protokollierung/Ausgabe (ing):

logger.debug('Hi! :)')
3
gies0r

Eine andere Variante kann sein ... Schließen Sie die Datei danach unbedingt

import sys
file = open('output.txt', 'a')
sys.stdout = file

print("Hello stackoverflow!") 
print("I have a question.")

file.close()
1
vic