我正在尝试编写一个简单的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。
答案 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,这已经不见了。