为什么在 python 中导入 kivy 时会打印信息行?
Why do the info lines get printed when importing kivy in python?
当我在 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, which simply uses the standard 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
)在首次使用时运行额外的代码并在 Kivy: v<version>
之前插入 Logger.info('Logger: Record log in %s' % filename)
消息被处理。最后,kivy/__init__.py
执行Logger.info('Python: v{}'.format(sys.version))
输出Python版本信息。
当我在 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, which simply uses the standard 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
)在首次使用时运行额外的代码并在 Kivy: v<version>
之前插入 Logger.info('Logger: Record log in %s' % filename)
消息被处理。最后,kivy/__init__.py
执行Logger.info('Python: v{}'.format(sys.version))
输出Python版本信息。