Umleiten von stdout und stderr zu gleichen Datei mit Python

Möchte ich umleiten den standard-Fehler und standard-Ausgabe von einem Python-Skript, um die gleiche Ausgabe-Datei. Aus dem terminal, die ich verwenden könnte

$ python myfile.py &> out.txt

tun, die gleiche Aufgabe, die ich will, aber ich muss es tun aus dem Python-Skript selbst.

Schaute ich in das Fragen Redirect Teilprozess stderr nach stdout, Zum umleiten von stderr in Python?, und Beispiel 10.10 aus hier, und dann habe ich versucht, die folgenden:

import sys
fsock = open('out.txt', 'w')
sys.stdout = sys.stderr = fsock

print "a"

welche zu Recht der entsprechende Buchstabe "a" in der Datei out.txt sein; aber, wenn ich das folgende versuchen:

import sys
fsock = open('out.txt', 'w')
sys.stdout = sys.stderr = fsock

print "a   # missing end quote, will give error

Bekomme ich die Fehlermeldung "SyntaxError ..." auf das terminal, aber nicht in der Datei out.txt. Was muss ich tun, um das senden der SyntaxError zu der Datei out.txt? Ich will nicht zu schreiben hier eine Ausnahme, weil in diesem Fall habe ich zu schreiben, zu viele Ausnahmen in das Skript. Ich verwende Python 2.7.

Update: Wie bereits in den Antworten und Kommentaren, dass SyntaxError immer Ausgabe auf Bildschirm, ersetzte ich die Zeile

print "a   # missing end quote, will give error

durch

print 1/0  # Zero division error

Den ZeroDivisionError ist die Ausgabe in Datei, als wollte ich es in meiner Frage.

  • versuchen Sie heben ein Fehler in Ihrem code, der nicht einen syntax-Fehler. Nach print "a", ein Fehler wie raise ValueError('A very specific bad thing happened')
  • Ich würde es vorziehen, nicht zu erhöhen Ausnahme aller Art, für der Grund, dass ich erwähnt habe in der Frage. Gibt es eine Möglichkeit, zu emulieren, die bash als "&> mit dem Namen von" in das Python-Skript selbst?
  • Ich meinte nur zu Testzwecken... um zu testen, dass es nur ein Fehler und stellen Sie sicher, es ist geschrieben, um Ihre Datei. Wenn also künftig alle Fehler in die Datei geschrieben werden
  • und James Russo, Sieht aus wie das problem war mit dem SyntaxError. Wahrscheinlich auch andere Ausnahmen sind die Weiterleitung zu Datei, wie ich wollte.
  • Funktioniert das nicht in Python 3.6? Ich bin Herumspielen mit ähnlichem code, aber nichts wird gedruckt, die text-Datei.
InformationsquelleAutor gora | 2016-08-04
Schreibe einen Kommentar