【问题标题】:Why when import pygame, it prints the version and welcome message. How delete it?为什么导入 pygame 时会打印版本和欢迎信息。怎么删?
【发布时间】:2018-12-30 01:25:28
【问题描述】:

为什么我导入pygame的时候有提示,打印版本和欢迎信息。消息内容

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

如何禁用此消息?

【问题讨论】:

  • @ggdx 他当然没有;但有时完全控制自己编写的程序的标准输出是件好事。
  • @ggdx。如果没有更多信息,您的评论是不合理的
  • 图书馆自我宣传是不礼貌的。
  • 不敢相信他们认为这样做是个好主意。

标签: python terminal pygame


【解决方案1】:

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

Python36-32\Lib\site-packages\pygame

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

【讨论】:

  • 如果不将包托管在存储库中,则无法在 Git 存储库中移植,这通常是一种不好的做法。
【解决方案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 的免费和开源库。

【讨论】:

    【解决方案3】:
    # 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
    

    最后一行安装的版本可以在不公布名称的情况下使用。

    【讨论】:

    • 不幸的是,Ubuntu 的 1.9.6+dfsg-2build1 版本默认仍然会产生此消息。
    【解决方案4】:

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

    第 1 步:

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

    第 2 步:

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

    示例:

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

    第三步:

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

    第四步:

    • 在任何文本编辑器中打开__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')
    
    • 现在保存文件,一切顺利!

    【讨论】:

      【解决方案5】:

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

      (感谢Brigand!

      【讨论】:

      • 至少在更新版本的 PyGame 中,您可以简单地设置一个环境变量,这更加简洁:) 请参阅 Eduardos 答案。
      • 当你from moviepy.editor import VideoFileClip 时,Eduardos 的回答将不起作用。
      【解决方案6】:

      它对我有用:

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

      【讨论】:

      • @ParasKorat 对我来说似乎很不言自明。
      • 如果我们使用 pyinstaller 制作 .py 文件的 .exe 文件,它会在未安装 python 的计算机上崩溃
      • 解释一下为什么将它设置为"hide"
      • @Wolf 看来变量只需要用任何字符串设置就可以了,所以你不必使用"hide",这完全是任意的。我什至使用了一个空字符串,它也起作用了。
      • @adamconkey 是的,但它必须是 string,否则会出现类型错误。
      【解决方案7】:

      进入pygame的__init__.py文件,到那个文件的底部,把那两个打印函数注释掉-

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

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

      【讨论】:

        【解决方案8】:

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

        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')
        

        this commit

        这是最近(2018 年 10 月)添加的,到目前为止 1.9.4 是在此之前发布的。下一个版本 > 1.9.4 发布后,您只需使用 PYGAME_HIDE_SUPPORT_PROMPT= ./my_code.py 运行代码即可隐藏消息。

        【讨论】:

          【解决方案9】:
          1. 导入pygame
          2. 获取初始化文件的位置:f = pygame.__file__
          3. 打开 f 并注释掉文件最后两行的打印内容

          【讨论】:

          • 这不仅可以精确定位到正确的路径 - 它也可以正常工作。 :) 谢谢,GuyOnStackOverflow
          【解决方案10】:

          我没有看到一种自然的方法来做到这一点(你的方法是我能找到的唯一的谷歌结果),但我确实通过在导入 pygame 时暂时禁用标准输出来实现同样的目的。

          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
          

          这是@Mad Physicist 建议的替代方案:

          import contextlib
          with contextlib.redirect_stdout(None):
              import pygame
          

          【讨论】:

          • 这很自然。试试contextlib.redirect_stdout(None) 以获得偏好。一般来说,进口和线路较少。也可能更健壮。
          • 顺便说一句,contextlib.redirect_stdout 是 python3+ 的东西,python2 中没有
          • 使用 contextlib.redirect_stdout(None),我的 SSH 光标消失了。对我来说这很有效:stackoverflow.com/a/8391735/8474284
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-12-06
          • 1970-01-01
          • 2021-09-23
          • 2021-04-04
          • 2017-11-24
          • 1970-01-01
          • 2011-07-05
          相关资源
          最近更新 更多