当我在python中导入kivy
时:
>>> import kivy
打印以下三个调试行:
[INFO ] [Logger ] Record Log in C:\Users\usrname\.kivy\logs\kivy_18-04-07_50.txt
[INFO ] [Kivy ] v1.10.0
[INFO ] [Python ] v3.6.5 (v3.6.5:f59c0932b4, Mar 28 2018, 17:00:18) [MSC v.1900 64 bit (AMD64)]
我知道这比错误更有意义,但是我想抑制这个输出。我已经阅读了文件kivy\__init__.py
,并发现在执行以下行时会打印这些行:
from kivy.compat import PY2
所以我也读过kivy\compat.py
,这甚至都不是一个大文件(102行),但我仍然看不出调试行打印的原因。
我在python控制台中执行了文件的每一行(包括文档字符串和注释),无法重现它。
有人可以向我解释一下吗?我认为这是内部的,只有可能,因为我用pip安装它,但实际上我不知道这里发生了什么。
答案 0 :(得分:3)
输出由kivy.logger
module生成,Python logger
module只使用标准{{3}}。
除非设置了KIVY_NO_CONSOLELOG
环境变量,否则模块会添加一个记录器输出到控制台:
if 'KIVY_NO_CONSOLELOG' not in os.environ:
# ...
formatter = ColoredFormatter(color_fmt, use_color=use_color)
console = ConsoleHandler()
console.setFormatter(formatter)
Logger.addHandler(console)
从那时起,记录的消息将打印到您的控制台。
触发所有这一切的kivy.compat
模块不是;在包中导入模块时,Python将始终确保首先加载包本身。因此,如果尚未加载,import kivy.compat
将触发kivy
本身的导入。
kivy/__init__.py
输出第一条日志消息:
if RELEASE:
Logger.info('Kivy: v%s' % (__version__))
但是同时配置的kivy.logger.FileHandler
对象(除非在环境中设置KIVY_NO_FILELOG
)在首次使用时运行额外的代码,并在Logger.info('Logger: Record log in %s' % filename)
消息之前插入Kivy: v<version>
处理。最后,kivy/__init__.py
执行Logger.info('Python: v{}'.format(sys.version))
以输出Python版本信息。