如何禁用虚拟环境IPython Scrapy Shell自动补全时的调试日志
解决Scrapy Shell中Tab补全时parso.python.diff调试日志泛滥的问题
我之前也被这个问题烦过好一阵子!每次按Tab补全代码就弹出一堆parso的DEBUG日志,完全挡住了补全提示,太影响效率了。下面给你几个实用的解决办法:
临时快速解决(单次生效)
如果你只是临时想禁用这些日志,启动Scrapy Shell之后,直接在交互环境里执行这段代码就行:
import logging logging.getLogger('parso.python.diff').setLevel(logging.WARNING)
执行完再按Tab,那些烦人的调试信息就消失了。
命令行启动时直接指定(单次生效)
启动Scrapy Shell的时候,可以通过参数调整日志级别,把整体日志调到INFO及以上,这样DEBUG级别的日志就不会显示在控制台了:
scrapy shell 'https://example.com' --log-level=INFO
这个方法是全局降低日志级别,适合临时快速使用。
长期生效:修改Scrapy配置
如果不想每次都手动设置,可以在你的Scrapy项目的settings.py里添加以下配置:
# 全局设置日志级别为INFO,也可以根据需要改成WARNING LOG_LEVEL = 'INFO' # 或者单独禁用parso的DEBUG日志,不影响其他日志 import logging logging.getLogger('parso.python.diff').setLevel(logging.WARNING)
这样每次启动Scrapy Shell都会自动应用这个配置,不用再手动操作。
长期生效:修改IPython配置
因为Scrapy Shell用的是IPython作为交互环境,而parso是IPython代码补全的依赖库,所以也可以直接在IPython的配置里禁用它的日志:
- 首先生成IPython的配置文件:
ipython profile create
- 找到生成的配置文件(一般在
~/.ipython/profile_default/ipython_config.py),打开后添加以下内容:
# 禁用parso的DEBUG日志 import logging logging.getLogger('parso').setLevel(logging.WARNING)
保存后,不管是直接启动IPython还是通过Scrapy Shell启动IPython,都会自动生效。
为什么会出现这个问题?
简单说就是Scrapy的日志系统会捕获所有Python日志输出,而IPython的代码补全依赖parso库,parso默认会输出DEBUG级别的调试日志,两者叠加就导致了Tab补全时日志泛滥的情况。我们的核心思路就是把parso的日志级别调高,让DEBUG日志不再输出。
内容的提问来源于stack exchange,提问作者Arun
相关产品推荐
相关产品推荐

