• 首页
  • 狐文
  • 狐图
  • About
狐窝
OvO
  1. 首页
  2. 未分类
  3. 正文

Scrapy 在PyCharm中输出信息为红色字体的解决办法

2019年04月19日 75点热度 0人点赞 0条评论
2017-03 from--https://www.jianshu.com/p/62f41ec59071

现象:

pycharm_logging.png

原因:

在PyCharm的设置中, 运行窗口会把stderr的信息输出为红色:

pycharm_error.png

只要把Foreground取消掉就可以了

本质:

那么现在的问题是, 为什么Scrapy的的log信息会出现在stderr中?

首先我们看一下Scrapy log的配置:

def configure_logging(settings=None, install_root_handler=True):

# 删除不必要的信息
    if install_root_handler:
        logging.root.setLevel(logging.NOTSET)
        handler = _get_handler(settings)
        logging.root.addHandler(handler)
        
def _get_handler(settings):
    """ Return a log handler object according to settings """
    filename = settings.get('LOG_FILE')
    if filename:
        encoding = settings.get('LOG_ENCODING')
        handler = logging.FileHandler(filename, encoding=encoding)
    elif settings.getbool('LOG_ENABLED'):
        handler = logging.StreamHandler()
    else:
        handler = logging.NullHandler()

    formatter = logging.Formatter(
        fmt=settings.get('LOG_FORMAT'),
        datefmt=settings.get('LOG_DATEFORMAT')
    )
    handler.setFormatter(formatter)
    handler.setLevel(settings.get('LOG_LEVEL'))
    if settings.getbool('LOG_SHORT_NAMES'):
        handler.addFilter(TopLevelFormatter(['scrapy']))
    return handler

Scrapy的默认设置是给root logger根据配置信息添加一个Handler, 默认为

handler = logging.StreamHandler()

而StreamHandler的默认设置是:

def __init__(self, stream=None):
    """
    Initialize the handler.

    If stream is not specified, sys.stderr is used.
    """
    Handler.__init__(self)
    if stream is None:
        stream = sys.stderr
    self.stream = stream

所以我们的log信息都跑到stderr中去了.

现在知道原理之后, 我们可以用更加Pythonic的方法解决这个问题:

import sys

sys.stderr = sys.stdout

这样, stdout 和 stderr 都指向同一个file descriptor, 所有的log 也都会写入这个file descriptor.

作者:李宏杰0209
链接:https://www.jianshu.com/p/62f41ec59071
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

标签: 暂无
最后更新:2019年04月19日

OvO

狐狸

点赞
< 上一篇
下一篇 >
最新 热点 随机
最新 热点 随机
钛备份或小米系统备份功能备份出来的APK无法正常还原 BBR安装启用 安装docker mitmproxy 调试方法 Android SDK 版本选择 Perdition Mail代理服务器配置 HAProxy SSL代理 Openssl 中间人SSL代理 Stunnel SSL to SSL代理 NGINX反代IMAP配置 各种设备User Agent Torrent下载工具推荐 用 rar2john+hashcat 破解 RAR 文件密码 2020最好的Linux发行版 关闭新版chrome工具栏上拼图图标 Office 下载、安装、激活,有它就够了! Android 非官方的发行版 openwrt添加autoconf-archive
10个提供免费动态域名解析服务的网站 CentOS 7 Shadowsocks优化 添加SCOTT实例步骤 Windows下基于cwRsync的文件同步 oracle 12c创建可插拔数据库(PDB)与用户详解 MS扫盲贴:Windows 和 GPT 常见问题解答(uefi、GPT、ESP、MSR之类的概念) 哪些 Python 库让你相见恨晚? chmod只修改子目录或文件的权限 Debian防火墙问题 网页工程师一定要知道的 14 个超棒 HTML/CSS 框架 Android使用adb获得当前应用 activity堆栈信息 chromium和webrtc编译相关资料 C++解密Chrome80版本数据库的方法示例代码 6个网盘中转站 租房注意事项 Debian更新报错 TypeError: 'NoneType' object is not callable Nginx上搭建WordPress及配置 完美迁移 Python书籍推荐
标签聚合
yum https ssl e 密码 安装 网卡 下载 路由 chrome chromium docker 镜像 git blog linux

COPYRIGHT © 2020 狐窝. ALL RIGHTS RESERVED.

THEME KRATOS MADE BY VTROIS