Piszę narzędzie badawcze, a ostatnio przełączyłem się z użycia instrukcji "print" na użycie funkcji rejestratora wbudowanej w Pythonie. To, jak uzasadniłem, pozwoliłoby mi dać użytkownikowi opcję zrzucenia danych wyjściowych do pliku, oprócz zrzucenia go na ekran.Logowanie z zewnętrznej aplikacji
Jak dotąd tak dobrze. Część mojego kodu, która jest w Pythonie, używa "logger.info" i "logger.error" do zrzutu zarówno do ekranu, jak i do pliku. "logger" to moduł rejestrujący całego modułu. Ta część działa jak urok.
Jednak w kilku punktach używam "subprocess.call" do uruchamiania pliku wykonywalnego przez powłokę. Tak, przez cały kod, mam linie takie jak
proc = subprocess.call(command)
Wyjście tego polecenia będzie drukować na ekranie, jak zawsze, ale nie byłoby zrzucić do pliku podanego przez użytkownika.
Możliwym rozwiązaniem byłoby otwarcie rury do pliku:
proc = subprocess.call(command, stdout=f, stderr=subprocess.OUTPUT)
Ale to tylko zrzucić do pliku, a nie na ekranie.
Zasadniczo moje pytanie sprowadza się do tego: czy istnieje sposób, w jaki mogę wykorzystać istniejący program rejestrujący, bez konieczności konstruowania innego programu obsługi dla plików specjalnie dla podprocesu. (Być może poprzez przekierowanie wyjścia do rejestratora?) Czy jest to niemożliwe, biorąc pod uwagę obecną konfigurację? Jeśli to drugie, jak mogę poprawić konfigurację?
(Oh, również, że byłoby wspaniale, gdyby było rejestrowanie w „czasie rzeczywistym”, tak, że wiadomości z pliku wykonywalnego są rejestrowane, jak są one odbierane.)
Dzięki za wszelką pomoc! :)
Lennart Regebro [Klasa StreamLogger] (http://stackoverflow.com/a/4838875/190597) będzie dobrze działać w twojej sytuacji. – unutbu
Dzięki za referencję! Działa to doskonale w moim przypadku. –