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

时间:2016-04-14 13:04:15

标签: python pygame

我正在尝试编写一个简单的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

在控制台上我得到了:

SDL_JoystickGetAxis value:258:
SDL_JoystickGetAxis value:258:
0.00787353515625 0.00787353515625

我将以文本模式运行脚本,而不是出于游戏目的,因此在我的情况下,输出充斥着无用的东西。 虽然类似的问题已经发布,但在我看来,它们都没有提供真正的解决方案。 造成这种情况的原因似乎是SDL库是在打开调试的情况下编译的。 如何禁用SDL库控制台输出?我不想像其他帖子所说的那样压制stdout / stderr。

2 个答案:

答案 0 :(得分:1)

正如另一个回答解释的那样,除非你自己重新编译SDL源,否则SDL会尝试写入stdout,因为它们会启用调试功能。我建议为get_axis编写一个函数,首先关闭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

答案 1 :(得分:1)

这已在pygame 1.9.3中修复。使用最新的pygame,这已经不见了。