如何在Python中隐藏SDL库调试消息?

2024-04-28 05:01:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试编写一个简单的python应用程序,它将检测2轴操纵杆轴的移动,并在一个轴移动到端点时调用其他函数。我不经常编程,我在做系统管理任务。在

使用pygame库这很容易,但是当我调用get_axis()方法时,我在控制台上得到了一个输出。示例:

import pygame
pygame.joystick.init()
stick = pygame.joystick.Joystick(0)  
stick.init()
pygame.init()  
while True:
 for e in pygame.event.get():
  x=stick.get_axis(0)
  y=stick.get_axis(1)
  print x,y

在控制台上我看到:

^{pr2}$

我将在文本模式下运行脚本,而不是为了游戏目的,所以在我的情况下,输出是大量无用的东西。 虽然类似的问题已经发布,但在我看来,没有一个能提供真正的解决方案。 造成这种情况的原因似乎是SDL库是在启用调试的情况下编译的。 如何禁用SDL库控制台输出?我不想像其他帖子所建议的那样抑制stdout/stderr。在


Tags: 方法函数应用程序getinit编程情况端点
2条回答

另一位回答者解释说,除非您自己重新编译SDL源代码,否则SDL将尝试写入stdout,因为它们保留了调试功能。我建议编写一个函数来获取_轴,它首先关闭stdout,调用SDL,再打开stdout,然后返回值。比如:

import sys
import os
import pygame

def quiet_get_axis(joystick):
   """Returns two floats representing joystick x,y values."""
   sys.stdout = os.devnull
   sys.stderr = os.devnull
   x = joystick.get_axis(0)
   y = joystick.get_axis(1)
   sys.stdout = sys.__stdout__
   sys.stderr = sys.__stderr__
   return x, y

stick = pygame.joystick.Joystick(0)
stick.init()
pygame.init()

while True:
    for e in pygame.event.get():
        x, y = quiet_get_axis(stick)
        print x, y

PyGame1.9.3中已经修复了这个问题。使用最新的pygame,这个就没了。在

相关问题 更多 >