如何在导入pygame时禁用欢迎消息

问题描述 投票:0回答:14

当我导入 pygame 时,它会打印版本和欢迎消息。消息内容如下:

pygame 1.9.4
Hello from the pygame community. https://www.pygame.org/contribute.html

为什么要打印这个? 如何禁用此消息?

python pygame
14个回答
141
投票

源代码中可以看出,如果设置了环境变量

PYGAME_HIDE_SUPPORT_PROMPT
,则不会打印该消息。因此,可以使用以下代码导入 pygame 而无需打印消息:

import os
os.environ['PYGAME_HIDE_SUPPORT_PROMPT'] = "hide"
import pygame

请注意,该值不一定是

"hide"
,也可以是其他任何值,并且环境变量也可以通过其他方式设置来实现相同的目的。


49
投票

这是@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

18
投票

源代码包含一个保护此消息打印的条件:

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
运行代码即可隐藏消息。


10
投票

您可以导航到 pygame 库文件夹,对于 3.6 32 位版本,如下所示:

Python36-32\Lib\site-packages\pygame

并编辑

__init__.py
文件并删除最后一行以消除此消息。


4
投票
  1. 导入pygame
  2. 获取init文件的位置:
    f = pygame.__file__
  3. 打开f并注释掉文件最后两行的打印内容

1
投票

这对我来说效果很好:

from os import environ
environ['PYGAME_HIDE_SUPPORT_PROMPT'] = '1'

import pygame

您只需确保您的导入不会被重新安排。

它出现在任何导入 pygame 的导入之前,而不仅仅是导入 pygame 之前。


1
投票

关于 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()

我希望这对遇到同样问题的人有所帮助。


0
投票

对我来说,只有这个在 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()

(感谢强盗!


0
投票

以下是我在名为 DialogX 的模块中完成此操作的方法:

import sys

sys.stdout = open(os.devnull, "w")
import pygame
sys.stdout = sys.__stdout__
del globals()["sys"]

0
投票

导入操作系统 os.system('cls') os.system('颜色02')


-2
投票

进入pygame的

__init__.py
文件,进入该文件的底部,注释掉这两个打印函数-

print('pygame %s' % ver)
print('Hello from the pygame community. https://www.pygame.org/contribute.html')

但是,我不会这样做,因为 pygame 社区是一个开源社区,他们希望尽可能多的人为 pygame 做出贡献,这就是为什么他们最后有这个打印功能。如果我是你,我不会评论它。


-2
投票

这是禁用它的一次性过程!

步骤1:

  • 运行包含以下代码的 dummy.py:
import pygame 
    
pygame.__file__

第2步:

  • 复制pygame源代码的路径,不包括
    __init__.py

示例:

C:\\Users\\dell\\AppData\\Roaming\\Python\\Python37\\site-packages\\pygame\\

步骤3:

  • 通过将其粘贴到运行对话框或任何其他方式来转到复制的位置

第四步:

  • 在任何文本编辑器中打开
    __init__.py
    并搜索welcome
  • 从文件中删除以下代码:
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')
  • 现在保存文件,就可以开始了!

-2
投票

您可以进入 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 的免费开源库。


-4
投票
# 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

使用最后一行安装的版本将在不宣布其名称的情况下运行。

© www.soinside.com 2019 - 2024. All rights reserved.