Protokollieren Sie Syntaxfehler und nicht erfasste Ausnahmen für einen Python-Unterprozess und drucken Sie sie auf dem Terminal aus

Das Problem

Ich habe versucht, ein Programm zu schreiben, das nicht erfasste Ausnahmen und Syntaxfehler für einen Unterprozess protokolliert. Einfach richtig? Pfeife einfachstderr an den richtigen Ort.

jedochDer Unterprozess ist ein anderes Python-Programm - ich werde es nennentest.py- Das muss so laufen, als würden seine Ausgaben / Fehler nicht erfasst. Das heißt, das Ausführen des Logger-Programms muss so aussehen, als ob der Benutzer es gerade ausgeführt hatpython test.py wie normal.

Eine weitere Komplikation des Problems istdas Problem Dasraw_input wird tatsächlich an gesendetstderr obreadline ist nicht benutzt. Leider kann ich nicht einfachimport readline, da ich keine Kontrolle über die Dateien habe, die mit meinem Fehlerprotokoll ausgeführt werden.

Anmerkungen:

Ich bin ziemlich beschränkt auf die Maschinen, auf denen dieser Code ausgeführt wird. Ich kann nicht installierenpexpect oder bearbeiten Sie die*customize.py Dateien (da das Programm von vielen verschiedenen Benutzern ausgeführt wird). Ich habe wirklich das Gefühl, dass es trotzdem eine stdlib-Lösung geben sollte ...Dies muss nur auf Macs funktionieren.Die Motivation dafür ist, dass ich Teil eines Teams bin, das die Fehler untersucht, die neue Programmierer bekommen.Was ich versucht habe

Ich habe die folgenden Methoden ohne Erfolg versucht:

nur mittee wie in der frageWie schreibe ich stderr in eine Datei, während ich "tee" mit einer Pipe verwende? (konnte nicht produzierenraw_input Eingabeaufforderungen); Python-Implementierungen vontee dass ich in mehreren SO Fragen gefunden hatte ähnliche Problemeüberschreibensys.excepthook (Fehler beim Ausführen eines Unterprozesses)Diese Frage ist Die beste Antwort schien vielversprechend, konnte aber nicht angezeigt werdenraw_input Eingabeaufforderungen richtig.dasProtokollierungsmodul Scheint nützlich, um tatsächlich in eine Protokolldatei zu schreiben, scheint aber nicht auf den Kern des Problems zu kommenbenutzerdefinierte stderr-leserendloses googeln

Antworten auf die Frage(2)

Ihre Antwort auf die Frage