Visual Studio открытый вопрос о файлах

Самый Pythonic путь - это модуль logging . Это было упомянуто в комментариях, но, к сожалению, без особого упорства. Существует много причин, которые предпочтительнее предупреждений :

  1. Модуль предупреждений предназначен для сообщения предупреждений о возможных проблемах с кодом, а не плохих пользовательских данных.
  2. Первая причина на самом деле достаточно. : -)
  3. Модуль регистрации обеспечивает настраиваемую серьезность сообщения: не только предупреждения, но и сообщения от отладочных сообщений до критических ошибок.
  4. Вы можете полностью контролировать вывод модуля регистрации. Сообщения могут быть отфильтрованы по их источнику, содержимому и строгости, отформатированы любым способом, отправлены на разные выходные цели (консоль, трубы, файлы, память и т. Д.) ...
  5. Модуль регистрации отключает фактическую ошибку / предупреждение / сообщение и вывод сообщений: ваш код может генерировать сообщения соответствующего типа и не должен беспокоить, как они представлены конечному пользователю.
  6. Модуль регистрации является стандартом де-факто для кода Python. Все используют его везде. Поэтому, если ваш код использует его, объединение его с сторонним кодом (вероятно, с помощью ведения журнала) будет легким. Ну, может быть, что-то более сильное, чем ветер, но определенно не ураган категории 5. : -)

Основной пример использования для модуля протоколирования будет выглядеть следующим образом:

import logging
logger = logging.getLogger(__name__) # module-level logger

# (tons of code)
logger.warning('illegal move: %s in file %s', move, file_name)
# (more tons of code)

Это приведет к печати таких сообщений, как:

WARNING:chess_parser:illegal move: a2-b7 in file parties.pgn

(при условии, что ваш модуль называется chess_parser.py)

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

logging.basicConfig(filename = 'parser.log', format = '%(name)s [%(levelname)s] %(message)s')

И вдруг без каких-либо изменений кода вашего модуля, ваши предупреждающие сообщения сохраняются в файл с другим форматом, а не на печать:

chess_parser [WARNING] illegal move: a2-b7 in file parties.pgn

Или вы можете подавить предупреждения, если хотите:

logging.basicConfig(level = logging.ERROR)

И ваш предупреждения модуля будут полностью игнорироваться, в то время как любые сообщения ERROR или более высокого уровня из вашего модуля будут обрабатываться.

31
задан Mikey P 2 November 2008 в 02:23
поделиться

8 ответов

Просто удалите .suo файл. Это содержит список открытых файлов.

27
ответ дан 27 November 2019 в 22:03
поделиться

Немного исследования поднимает то, что можно сделать это с макросом:

  • Создают новый макрос (или используйте существующий). Необходимо видеть модуль, названный EnvironmentEvents в Макро-Проводнике. (Для получения дополнительной информации см. здесь .)
  • Открываются EnvironmentEvents модуль.
  • Вставленный в этот код:

    Public Sub CloseDocsOnExit() Handles SolutionEvents.BeforeClosing
        DTE.ExecuteCommand("Window.CloseAllDocuments")
    End Sub
    
  • Сохраняют и Сборка макрос.
  • Открывают целый набор документов в Вашем решении, затем близкой Visual Studio.
  • Yay! Никакие более открытые документы!
  • (Примечание: Несмотря на это это говорит, что SolutionEvents, также работает, если Вы работаете над проектом, который не имеет решения.)
26
ответ дан 27 November 2019 в 22:03
поделиться

Я никогда не понимал, насколько это раздражало меня также! Я не смог найти установку, но в Options > Environment > Keyboard можно связать ярлык на Window.CloseAllDocuments. ALT+X был развязан для меня так, я просто использовал это. Мне интересно, если существует некоторая скрытая установка, чтобы автоматически сделать это на выходе решения хотя (или загрузка).

5
ответ дан 27 November 2019 в 22:03
поделиться

Редактирование: Полностью читайте, вопрос неправильно сначала - игнорируют мое первое (теперь уведенный) ответ. :)

я изменил клавиатуру, отображающуюся для CTRL-SHIFT-C от перевода в рабочее состояние Представления класса к закрытию всех окон документа - что-то, что я использую несколько порядков величины чаще - и затем я просто очищаю свою рабочую область прежде, чем закрыть решение.

3
ответ дан 27 November 2019 в 22:03
поделиться

Я надеялся на что-то немного более автоматическое. VS создаст новый .suo файл каждый раз, когда проект сохраняется. Таким образом, я должен был бы удалить тот файл каждый раз, когда я открываю проект. Я также не хочу должным быть не забывать закрывать все файлы перед заключительным VS.

Другие IDE, которые я использовал, имеют схожую функциональность, но также и делают довольно простым стать включения - выключения.

спасибо за Вашу справку.

2
ответ дан 27 November 2019 в 22:03
поделиться

Или можно закрыть весь открытый документ из Меню окна перед заключительным VS.

0
ответ дан 27 November 2019 в 22:03
поделиться

Попробуйте следующее:

  1. Закройте программу после закрытия всех файлов.
  2. Сделайте копию [любой] .suo
  3. Снова откройте решение, откройте несколько файлов и exit.
  4. Скопируйте (не перемещайте) старый файл .suo поверх только что сгенерированного.
  5. Сделайте файл .suo доступным только для чтения.

Если у вас есть репозиторий, вы можете проверить его файл в.

Я предлагаю это, потому что у меня была обратная проблема, когда мои старые файлы не открывались автоматически, а причиной был файл .suo, который был зарегистрирован в репозитории и был (по какой-то причине) не перезаписывается Studio. Файл даже не был защищен от записи.

3
ответ дан 27 November 2019 в 22:03
поделиться

Для меня работает единственный способ: изменить местоположение проекта и снова открыть там форму решений. :)

-1
ответ дан 27 November 2019 в 22:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: