Как pylint закрывает окно командной строки Windows, в котором работает?

Pylint делает что-то странное на моей Windows-коробке, что не должно быть возможным. Это не вопрос исправления Пилинта, а скорее исправления моего понимания.

У меня есть типичная установка последней версии Pylint, Python 2.6 и Windows Vista.

Если я открываю командную строку и запускаю pylint из командной строки, он выполняется успешно, а затем, когда он достигает конца программы, он не просто снова выходит в командную строку, но закрывает все окно командной строки.

Я кратко рассмотрел код в сети (который, как я полагаю, является кодом, который на самом деле выполняется), и они вызывают sys.exit() с различными уровнями ошибок, но мое чтение и тестирование показывают, что все равно следует просто вернуться к команде строка с соответствующим набором уровней ошибок.

Pylint также запускается как часть режима тестирования моего проекта, и он работает там, предлагая мне, что если он вызывается как метод Python, а не из командной строки, у него нет такой же проблемы (вероятно, нет вызова sys.exit() в этом пути кода.)

Каким механизмом Pylint может закрыть "оболочку", в которой она находилась?

Если это ошибка в Pylint? Я не вижу как. Ошибка в Python? Ошибка в Windows?

3 ответа

Решение

Я только что попробовал это на XP:

t.bat:

exit

Запуск это закрывает окно!

Может быть, командная строка для Pylint использует командный файл, который содержит выход?

Это http://www.logilab.org/ticket/19498 запланированное на 0.20.0 (в настоящее время в разработке).

Это очень легко исправить. Зайдите в вашу папку сценариев Python и найдите файл pylint.bat и откройте его в блокноте.

Это будет читать следующее

@echo off
rem = """-*-Python-*- script
rem -------------------- DOS section --------------------
rem You could set PYTHONPATH or TK environment variables here
python -x "%~f0" %*
goto exit

"""
# -------------------- Python section --------------------
import sys
from pylint import lint
lint.Run(sys.argv[1:])


DosExitLabel = """
:exit
exit(ERRORLEVEL)
rem """

Чтобы устранить проблему, возникающую при закрытии подсказки, измените ее на следующую

@echo off
rem = """-*-Python-*- script
rem -------------------- DOS section --------------------
rem You could set PYTHONPATH or TK environment variables here
python -x "%~f0" %*
goto exit

"""
# -------------------- Python section --------------------
import sys
from pylint import lint
lint.Run(sys.argv[1:])


DosExitLabel = """
:exit
ECHO.
rem exit(ERRORLEVEL)
rem """

По сути, все, что я сделал, это закомментировал выход (ERRORLEVEL) с ключевым словом "rem", а затем вернулся к приглашению, которое я добавил пустой строкой с надписью "ECHO". чтобы приглашение не перекосилось с выводом.

Другие вопросы по тегам