当我在 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 安装它才可能,但实际上我不知道这里发生了什么。
最佳答案
输出由 kivy.logger
module 生成,它简单地使用标准 Python logger
module .
该模块添加一个记录器以输出到控制台,除非 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版本信息。
关于python - 为什么在 python 中导入 kivy 时会打印信息行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49711968/