logować błędy składniowe i nie przechwycone wyjątki dla podprocesu Pythona i drukować je na terminalu
Próbowałem napisać program, który rejestruje niezłapane wyjątki i błędy składniowe dla podprocesu. Łatwo, prawda? Tylko fajkastderr
we właściwym miejscu.
jednak, podproces to kolejny program Pythona - zadzwonię do niegotest.py
- musi działać tak, jakby jego dane wyjściowe / błędy nie były przechwytywane. Oznacza to, że uruchomienie programu rejestrującego musi wyglądać tak, jakby użytkownik właśnie uruchomiłpython test.py
jak normalnie.
Dalszy komplikuje problemproblem żeraw_input
faktycznie zostaje wysłany dostderr
Jeślireadline
nie jest używany. Niestety nie mogę tak po prostuimport readline
, ponieważ nie mam kontroli nad plikami, które są uruchamiane za pomocą mojego rejestratora błędów.
Uwagi:
Jestem dość ograniczony na komputerach, na których będzie działał ten kod. Nie mogę zainstalowaćpexpect
lub edytuj*customize.py
pliki (ponieważ program będzie uruchamiany przez wielu różnych użytkowników). Naprawdę czuję, że i tak powinno być rozwiązanie stdlib ...Musi to działać tylko na macach.Motywacją jest to, że jestem częścią zespołu badającego błędy, które napotykają nowi programiści.Co próbowałemPróbowałem następujących metod bez powodzenia:
po prostu używamtee
jak w pytaniuJak napisać stderr do pliku, używając „tee” z potokiem? (nie udało się wyprodukowaćraw_input
monity); implementacje Pythonatee
które znalazłem w kilku pytaniach SO miało podobne problemynadpisywaniesys.excepthook
(nie udało się go uruchomić dla podprocesu)to pytanie najlepsza odpowiedź wydawała się obiecująca, ale nie udało się jej wyświetlićraw_input
monituje poprawnie.moduł logowania wydaje się przydatny do zapisywania do pliku dziennika, ale wydaje się, że nie trafia w sedno problemuniestandardowe czytniki stderrniekończące się googling