2016-04-14 9 views
2

私は、2軸のジョイスティック軸の動きを検出し、1つの軸がエンドポイントに移動したときに他の機能を呼び出す単純なPythonアプリケーションを作成しようとしています。私は定期的にプログラミングをしません、私はsysadminの仕事をしています。PythonでSDLライブラリのデバッグメッセージを隠すには?

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を抑制したくありません。

+1

関連性:[Ubuntuバグトラッカーで報告された年前](https://bugs.launchpad.net/ubuntu/+source/pygame/+bug/1023153)/ [pygameバグトラッカーでも](https: //bitbucket.org/pygame/pygame/issues/63) – sloth

答えて

1

別の回答がありますので、SDLソースを自分で再コンパイルしない限り、SDLはデバッグ機能を残しているためstdoutに書き込もうとします。最初にstdoutをオフにし、SDLを呼び出し、stdoutに戻り、値を返すget_axisに関数を書くことをお勧めします。次のようなものがあります。

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

これはpygame 1.9.3で修正されました。最新のpygameを使用して、これはなくなっています。

関連する問題