#python #stdout
#python #стандартный вывод
Вопрос:
Мне трудно понять, в чем проблема с моим фрагментом кода для записи сообщений печати в моей консоли в несколько файлов журнала.
Предполагается, что фрагмент кода, который я опубликовал ниже, должен создать новый каталог test
, затем записать 11 файлов журнала, 1 глобальный файл журнала и 10 файлов журнала цикла в этот каталог. Однако при запуске 1st 2 сообщения о печати в моем глобальном файле журнала отсутствуют, и я не могу понять, в чем проблема?
import sys
import os
# Create a test folder to store these global and loop log files.
path = os.getcwd()
test_dir_name = 'test'
test_dir_path = os.path.join(path, test_dir_name)
os.mkdir(test_dir_path)
# Keep a reference to the original stdout.
orig_stdout = sys.stdout
# Define global logfile path.
global_log_name = "global-log.txt"
global_log_path = os.path.join(test_dir_path, global_log_name)
# Problematic code-snippet
sys.stdout = open(global_log_path, 'w')
print("This is a global log file.") # Why is my code omitting this line?
print("The loop is now creating 10 individual log files.") # And this one?
sys.stdout.close()
for i in range(10):
sys.stdout = open(global_log_path, 'w')
print("Creating loop log file {}...".format(i))
sys.stdout.close()
loop_log_name = "local-log-{}.txt".format(i)
loop_log_path = os.path.join(test_dir_path, loop_log_name)
sys.stdout = open(loop_log_path, 'w')
print("This is loop log file {}".format(i))
print("Closing this loop log file...")
sys.stdout.close()
sys.stdout = open(global_log_path, 'w')
print("Loops have concluded.") # But then it includes this line.
print("Now closing global log file.") # And this line in the global log file.
sys.stdout.close()
sys.stdout = orig_stdout
print("Back to original console.")
Некоторая помощь была бы весьма признательна.
Комментарии:
1. Было бы проще использовать
logging
для этого…
Ответ №1:
Основной проблемой этого фрагмента кода является неправильное использование open(global_log_path, 'w')
для добавления дополнительных сообщений печати global-log.txt
. После первоначального выполнения:
sys.stdout = open(global_log_path, 'w')
print("This is a global log file.") # Why is my code omitting this line?
print("The loop is now creating 10 individual log files.") # And this one?
Последующие перенаправления stdout
to global-log.txt
вместо этого требуют передачи аргумента a
, обозначающего append to open()
like so:
sys.stdout = open(global_log_path, 'a')
print("Creating loop log file {}...".format(i))
Это предотвращает перезапись ранее перенаправленного текста, что происходило с вашим фрагментом кода.