PyCharm记录输出颜色

问题描述 投票:35回答:6

我正在使用PyCharm在Mac OS X中开发GAE应用程序。有没有办法在PyCharm的运行控制台中显示颜色?

我设置了一个handler来输出ansi格式的颜色。然后,我添加了处理程序:

LOG = logging.getLogger()
LOG.setLevel(logging.DEBUG)
for handler in LOG.handlers:
    LOG.removeHandler(handler)

LOG.addHandler(ColorHandler())

LOG.info('hello!')
LOG.warning('hello!')
LOG.debug('hello!')
LOG.error('hello!')

但颜色是一样的。

编辑:

来自JetBrains issue tracker的回复:将片段的第55行从sys.stderr更改为sys.stdout。 stderr流总是用红色着色而stdout不是。

现在颜色正确显示。

python google-app-engine logging pycharm
6个回答
24
投票

PyCharm本身不支持该功能,但您可以下载Grep Console plugin并根据需要设置颜色。

这是一个截图: http://plugins.jetbrains.com/files/7125/screenshot_14104.png (链接死了)

我希望它有所帮助:)虽然它没有提供完全彩色的控制台,但它迈出了一步。


22
投票

至少从PyCharm 2017.2开始,你可以通过以下方式实现:

运行|编辑配置... |配置|在输出控制台中模拟终端

Run configuration

enter image description here


6
投票

迟到了,但是有这个问题的其他人,这里有适合我的解决方案:

import logging
import sys
logging.basicConfig(stream=sys.stdout, level=logging.DEBUG)

这来自this answer


0
投票

为我解决的问题(在PyCharm 2017.2上)是去Preferences -> Editor -> Color Scheme -> Console Colors并改变Console -> Error output的颜色。当然这也会改变错误颜色,但至少你不会一直看到红色......


0
投票

我发现了以下解决方案。显然Pycharm重定向sys.stdout。来自sys module documentation

sys.__stdin__
sys.__stdout__
sys.__stderr__

这些对象在程序开头包含stdin,stderr和stdout的原始值。它们在最终确定期间使用,无论sys.std *对象是否已被重定向,它都可用于打印到实际的标准流。

它还可以用于将实际文件还原到已知的工作文件对象,以防它们被破坏的对象覆盖。但是,执行此操作的首选方法是在替换之前显式保存先前的流,并还原已保存的对象。

因此,要解决此问题,您可以将输出重定向到sys.__stdout__。我的log_config.yml中的配置示例:

console:
  class: logging.StreamHandler
  level: DEBUG
  stream: "ext://sys.__stdout__"
  formatter: colorFormatter

0
投票

PyCharm 2019.1.1(Windows 10,1709) - 按原样运行snippet - 工作正常。

错误:setFormatter - 不起作用。

修复:在第67行进行更改并在第70-71行(无格式处理程序添加)中删除。

self.stream.write(record.msg + "\n", color)

self.stream.write(self.format(record) + "\n", color)

可以在手动文件运行结构下移动70-71行以节省测试能力:

if __name__ == "__main__":
    logging.getLogger().setLevel(logging.DEBUG)
    logging.getLogger().addHandler(ColorHandler())

    logging.debug("Some debugging output")
    logging.info("Some info output")
    logging.error("Some error output")
    logging.warning("Some warning output")

与标准StreamHandler进行比较:

import logging
import logging_colored

log_format = logging.Formatter("[%(threadName)-15.15s] [%(levelname)-5.5s]  %(message)s")
logger = logging.getLogger('Main')
logger.setLevel(logging.DEBUG)

console = logging.StreamHandler()
console.setFormatter(log_format)
logger.addHandler(console)

console = logging_colored.ColorHandler()
console.setFormatter(log_format)
logger.addHandler(console)
...

© www.soinside.com 2019 - 2024. All rights reserved.