2014-09-21 1 views
1

Я новичок в Python. Я использую Vim с Python-mode для редактирования и тестирования своего кода и заметил, что если я буду запускать один и тот же код более одного раза, файл регистрации будет обновляться только при первом запуске кода. Например ниже фрагмент кода, который называется «testlogging.py»Сброс интерпретатора python для ведения журнала

#!/usr/bin/python2.7 
import os.path 
import logging 

filename_logging = os.path.join(os.path.dirname(__file__), "testlogging.log") 
logging.basicConfig(filename=filename_logging, filemode='w', 
       level=logging.DEBUG) 
logging.info('Aye') 

Если я открываю новую GVim сессию и запустить этот код питона-режиме, то я хотел бы получить файл с именем «testlogging.log» с содержание

INFO:root:Aye 

Выглядит многообещающе! Но если я удалю файл журнала и снова запустил код в режиме pythong, файл журнала не будет воссоздан. Если в это время я запускаю код в таком терминале

./testlogging.py 

Затем файл журнала будет сгенерирован снова!

Я проверил документацию Python и заметил эту строку в лесозаготовительной учебнике (https://docs.python.org/2.7/howto/logging.html#logging-to-a-file):

Очень распространенная ситуация такова, что в записи регистрации событий в файле, так что давайте посмотрим на это в следующем. Обязательно попробуйте следующее в недавно запущенном интерпретаторе Python и не просто продолжайте с описанного выше сеанса: ...

Так что, я думаю, эта проблема с файлом регистрации, обновленным только однажды, с режимом python, остающимся в том же интерпретаторе, когда я запускаю код второй раз. Поэтому мой вопрос: есть ли решение этой проблемы, пускаясь с помощью модуля протоколирования, помещая что-то в код, чтобы сбросить интерпретатор или сообщив Python-mode о его сбросе?

Я также любопытно, почему модуль регистрации требует вновь начал работать переводчиком ...

Спасибо за вашу помощь заранее.

ответ

1

Файл журнала не воссоздается, поскольку в модуле регистрации все еще открыт старый файл журнала и будет продолжаться его запись (даже если вы его удалили). Решение состоит в том, чтобы заставить модуль протоколирования освободить все приобретенные ресурсы перед запуском кода снова в том же переводчике:

# configure logging 
# log a message 
# delete log file 

logging.shutdown() 

# configure logging 
# log a message (log file will be recreated) 

Других словах, вызов logging.shutdown() в конце коды, а затем вы можете повторно запустить его внутри одного и того же интерпретатора, и он будет работать как ожидалось (воссоздание файла журнала при каждом запуске).

0

Вы открыли файл журнала с режимом «w». «w» означает запись данных с начала, поэтому вы видели только журнал последнего выполнения.

Вот почему вы видите такое же содержимое в файле журнала.

Вы должны исправить свой код на пятой-седьмой строчке ниже.

filename_logging = os.path.join(os.path.dirname(__file__), "testlogging.log") 
logging.basicConfig(filename=filename_logging, filemode='a', 
      level=logging.DEBUG) 

Код выше использования «а» режим, т.е. Append режим, поэтому новые данные журнала будут добавлены в конец файла журнала.

+0

Благодарим вас за ответ. Но мой вопрос заключается в том, что я запускаю тот же код во второй раз в режиме python, ведение журнала не работает и генерирует файл журнала; мой вопрос не в том, что я хочу добавить в файл журнала.Я ожидал увидеть то же содержимое во втором прогоне, но файл журнала вообще не существует! –