Как pylint выходит из командного окна Windows, в котором он работает?
-
19-09-2019 - |
Вопрос
Pylint делает что-то странное в моем компьютере с Windows — что-то невозможное.Речь идет не об исправлении пилинта, а об исправлении моего понимания.
У меня типичная установка последней версии pylint, Python 2.6 и Windows Vista.
Если я открываю командную строку и запускаю pylint из командной строки, она выполняется успешно, а затем, когда она доходит до конца программы, она не просто снова выходит в командную строку, но закрывает все окно командной строки.
Я бегло просмотрел код в Интернете (который, как я предполагаю, является кодом, который на самом деле запускается), и они вызывают sys.exit() с различными уровнями ошибок, но мое чтение и тестирование показывают, что все равно следует просто вернуться к команде строку с соответствующим набором уровней ошибок.
Pylint также запускается как часть режима тестирования моего проекта и работает там, подсказывая мне, что если он вызывается как метод Python, а не из командной строки, у него не возникает такой проблемы (вероятно, нет вызова sys .exit() в этом пути кода.)
Каким механизмом пилинт мог закрыть содержащую его «оболочку»?
Если это ошибка в Pylint?Я не понимаю, как это сделать.Ошибка в Python?Ошибка в Windows?
Решение
Я только что попробовал это на XP:
т.бат:
exit
Запуск этого закроет окно!
Может быть, командная строка pylint использует командный файл, содержащий выход?
Другие советы
Это очень легко исправить.Перейдите в папку сценариев 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". так что подсказка не перекосится с выводом.
Это http://www.logilab.org/ticket/19498 запланировано на версию 0.20.0 (в настоящее время находится в разработке).