python - 为什么在 python 中导入 kivy 时会打印信息行?

标签 python import kivy python-internals

当我在 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/

相关文章:

python - 使用python逐行检查大量关键字

python - 为什么人们说 RPython 是一种令人不愉快的编程语言

python - 我无法将 ML 模型加载到尝试使用 joblib 和 pickle 的 flask 中

sql - BCP批量导入在第一行抛出 'Invalid character value for cast specification'

python - 使用 Python 和 Kivy 库创建具有 Openai 人工智能的虚拟助手

python - 构建 kivy 应用程序时出错 : ModuleNotFoundError: No module named 'typing_extensions'

使用可配置文本编辑器的 Python raw_input() 替换

java - SBT 看不到 Java 类

android - 如何导入电子邮件附件?

python - Kivy中如何通过函数实现到新Screen的转换?