当我导入 pygame 时,它会打印版本和欢迎消息。消息内容如下:
pygame 1.9.4
Hello from the pygame community. https://www.pygame.org/contribute.html
为什么要打印这个? 如何禁用此消息?
从源代码中可以看出,如果设置了环境变量
PYGAME_HIDE_SUPPORT_PROMPT
,则不会打印该消息。因此,可以使用以下代码导入 pygame 而无需打印消息:
import os
os.environ['PYGAME_HIDE_SUPPORT_PROMPT'] = "hide"
import pygame
请注意,该值不一定是
"hide"
,也可以是其他任何值,并且环境变量也可以通过其他方式设置来实现相同的目的。
这是@Mad Physicist 建议的更好的替代方法:
import contextlib
with contextlib.redirect_stdout(None):
import pygame
或者,如果您的 Python 版本早于 3.4,您可以通过在导入 pygame 时暂时禁用 stdout 来实现相同的效果,而无需
contextlib
导入。
import os, sys
with open(os.devnull, 'w') as f:
# disable stdout
oldstdout = sys.stdout
sys.stdout = f
import pygame
# enable stdout
sys.stdout = oldstdout
源代码包含一个保护此消息打印的条件:
if 'PYGAME_HIDE_SUPPORT_PROMPT' not in os.environ:
print('pygame %s' % ver)
print('Hello from the pygame community. https://www.pygame.org/contribute.html')
参见此提交
这是最近(2018 年 10 月)添加的,到目前为止 1.9.4 已在此之前发布。下一个版本 > 1.9.4 发布后,您只需使用
PYGAME_HIDE_SUPPORT_PROMPT= ./my_code.py
运行代码即可隐藏消息。
您可以导航到 pygame 库文件夹,对于 3.6 32 位版本,如下所示:
Python36-32\Lib\site-packages\pygame
并编辑
__init__.py
文件并删除最后一行以消除此消息。
f = pygame.__file__
这对我来说效果很好:
from os import environ
environ['PYGAME_HIDE_SUPPORT_PROMPT'] = '1'
import pygame
您只需确保您的导入不会被重新安排。
它出现在任何导入 pygame 的导入之前,而不仅仅是导入 pygame 之前。
关于 Eduardo 的回答,我的格式化程序
autopep8
遇到问题,无法将用于设置 PYGAME_HIDE_SUPPORT_PROMPT
环境变量的行放在导入 pygame
的行上方。因此,我必须做这样的事情:
import os # last import (all other imports above this one)
os.environ['PYGAME_HIDE_SUPPORT_PROMPT'] = 'hide'
def import_pygame():
global pygame
import pygame
import_pygame()
我希望这对遇到同样问题的人有所帮助。
对我来说,只有这个在 python 3 中有效:
import sys, os
# Disable print
def blockPrint():
sys.stdout = open(os.devnull, 'w')
# Enable print
def enablePrint():
sys.stdout = sys.__stdout__
blockPrint()
import pygame
enablePrint()
(感谢强盗!)
以下是我在名为 DialogX 的模块中完成此操作的方法:
import sys
sys.stdout = open(os.devnull, "w")
import pygame
sys.stdout = sys.__stdout__
del globals()["sys"]
导入操作系统 os.system('cls') os.system('颜色02')
进入pygame的
__init__.py
文件,进入该文件的底部,注释掉这两个打印函数-
print('pygame %s' % ver)
print('Hello from the pygame community. https://www.pygame.org/contribute.html')
但是,我不会这样做,因为 pygame 社区是一个开源社区,他们希望尽可能多的人为 pygame 做出贡献,这就是为什么他们最后有这个打印功能。如果我是你,我不会评论它。
这是禁用它的一次性过程!
import pygame
pygame.__file__
__init__.py
C:\\Users\\dell\\AppData\\Roaming\\Python\\Python37\\site-packages\\pygame\\
__init__.py
并搜索welcomeif 'PYGAME_HIDE_SUPPORT_PROMPT' not in os.environ:
print('pygame %s' % ver)
print('Hello from the pygame community. https://www.pygame.org/contribute.html')
您可以进入 pygame 的
__init__.py
文件并注释掉导致打印消息的行。它正好位于第 355 行。这是执行此操作的代码。
# Thanks for supporting pygame. Without support now, there won't be pygame
#later.
if 'PYGAME_HIDE_SUPPORT_PROMPT' not in os.environ:
print('pygame {} (SDL {}.{}.{}, Python {}.{}.{})'.format(
ver, *get_sdl_version() + sys.version_info[0:3]
))
print('Hello from the pygame community.
https://www.pygame.org/contribute.html')
您可以继续注释掉这些行。我测试过,没有任何问题。
但永远要感谢 pygame 的免费开源库。
# remove pygame installed with "pip install..."
python pip uninstall pygame
# remove all folder with pygame
sudo apt-get update -y; sudo apt-get upgrade -y
sudo apt-get install python-pygame
使用最后一行安装的版本将在不宣布其名称的情况下运行。