pylint如何退出其运行的Windows命令框?
Pylint在我的Windows电脑上出现了一些奇怪的情况——这种情况本来是不应该发生的。这不是一个关于如何修复pylint的问题,而是想弄清楚我自己的理解。
我安装的是最新版本的pylint,使用的是Python 2.6和Windows Vista。
当我打开命令提示符,直接在命令行运行pylint时,它能够成功执行。但当程序运行到最后,它不是简单地返回到命令行,而是直接关闭了整个命令提示符窗口。
我在网上简单看了一下代码(我假设这就是实际运行的代码),发现它们调用了sys.exit(),并传入了不同的错误级别。但根据我的理解和测试,这应该只是返回到命令行,并设置相应的错误级别。
Pylint还作为我项目测试的一部分运行,在那里它工作正常,这让我觉得如果通过Python方法调用它,而不是通过命令行,它就不会出现这个问题(可能在这个代码路径中没有调用sys.exit())。
那么,pylint是通过什么机制关闭了它所在的“命令行窗口”呢?
这是pylint的一个bug吗?我看不出有什么理由。是Python的bug?还是Windows的bug?
3 个回答
这是一个链接,指向一个网站,内容是关于一个计划在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 """
其实我做的就是把 exit(ERRORLEVEL) 这一行用 "rem" 这个关键词注释掉,然后在它返回提示符之前,我加了一行空的打印命令 "ECHO.",这样提示符就不会和输出内容混在一起了。
我刚在XP系统上试了这个:
t.bat文件内容:
exit
运行这个文件会关闭窗口!
也许pylint的命令行是用一个包含exit的批处理文件?