Zapisywanie logow z pracy pythona do pliku txt

Odpowiedz Nowy wątek
2019-07-05 08:41

Rejestracja: 1 rok temu

Ostatnio: 14 godzin temu

0

Hej, mam pewnien problem. Uruchamiam plik .bat ktory uruchamia plik pythona z testami. Wykonanie calego pliku trwa kilka godzin, dlatego dobrze by bylo móc gdzieś zapisać konsole pythona w razie bledu. Probowalem w taki sposob:

def run_and_save_output():
    logfile = open(log_file, 'w')
    proc = subprocess.Popen([sys.executable, script_name], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
    for line in proc.stdout:
        sys.stdout.write(line)
        logfile.write(line)
    proc.wait()

generalnie dla malych plikow dziala fajnie, jest plik z logami i sa wyniki w konsoli. Natomiast gdy uruchamiam duzy plik jak ten z testami to pojawia sie problem taki ze w konsoli nie ma nic dośc długo, wyglada jakby sie zwiesilo i dopiero po jakims czasie sie pojawiaja informacje takimi porcjami i sa niekompletne i w innym porządku niz podczas normlanego uruchamiania.
Probowalem też innym sposobem, w batchu za pomoca tego : > np

python run_test.py > log_file.txt

W tym przypadku w consoli nie ma nic, natomiast log file tez ma zaburzona kolejnosc i nie ma tam wszystkich informacji.

Plik z testami uruchamia też za pomocą os.system inny plik pythona i interperter ( python 2.2) oraz konsole Matlaba. W logach wyglada to tak jakby raz bylo info z konsoli pythona 2.2 , raz z pythona 2.7.
Jest jakis sposob by skopiowac całą konsole pythona/batcha do pliku .txt ?

Pozostało 580 znaków

2019-07-05 08:48
Moderator

Rejestracja: 12 lat temu

Ostatnio: 22 minuty temu

Lokalizacja: Wrocław

0

Nie możesz wprost some.bat > log.txt? :-P
(+ ofc. stderr oraz inne możliwe streamy)


edytowany 2x, ostatnio: Patryk27, 2019-07-05 10:31

Pozostało 580 znaków

2019-07-05 10:18

Rejestracja: 2 lata temu

Ostatnio: 2 minuty temu

Przeczytaj sobie to https://realpython.com/python-logging/ , logi się będą odkładały tam gdzie chcesz ;)

Pozostało 580 znaków

2019-07-24 13:03

Rejestracja: 1 rok temu

Ostatnio: 14 godzin temu

0

Dzięki, zastosowałem logging i taki blok kodu robi to co trzeba bylo:

        self.format = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s")
        self.logging_root = logging.getLogger()

        self.fileHandler = logging.FileHandler(path_to_log_file)
        self.fileHandler.setFormatter(self.format)
        self.logging_root.addHandler(self.fileHandler)

        self.consoleHandler = logging.StreamHandler()
        self.consoleHandler.setFormatter(self.format)
        self.logging_root.addHandler(self.consoleHandler)

        self.logging_root.setLevel(logging.DEBUG)

i nastepnie odwołanie sie poprzez np : self.logging_root.error(message)

Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0