我正在使用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不是。
现在颜色正确显示。
PyCharm本身不支持该功能,但您可以下载Grep Console plugin并根据需要设置颜色。
这是一个截图: http://plugins.jetbrains.com/files/7125/screenshot_14104.png (链接死了)
我希望它有所帮助:)虽然它没有提供完全彩色的控制台,但它迈出了一步。
迟到了,但是有这个问题的其他人,这里有适合我的解决方案:
import logging
import sys
logging.basicConfig(stream=sys.stdout, level=logging.DEBUG)
这来自this answer
为我解决的问题(在PyCharm 2017.2上)是去Preferences -> Editor -> Color Scheme -> Console Colors
并改变Console -> Error output
的颜色。当然这也会改变错误颜色,但至少你不会一直看到红色......
我发现了以下解决方案。显然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
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)
...