2016-04-14 21 views
2

2 eksenli bir joystick ekseni hareketlerini algılayan ve bir eksen bir uç noktaya taşındığında diğer işlevleri çağıran basit bir python uygulaması yazmaya çalışıyorum. Düzenli programlama yapmıyorum, sysadmin görevleri yapıyorum.Python'da SDL kitaplığı hata ayıklama iletileri nasıl gizlenir?

Pygame kütüphanesini kullanmak kolay olurdu, ancak get_axis() yöntemini çağırdığımda, konsolda bir çıkış alıyorum. Örnek:

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 

Ve konsolda aldım: çıktı yararsız şeylerle dolu benim durumda bu yüzden

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

ben değil, oyun amaçlı, metin modunda komut dosyası çalıştıran edilecektir. Şimdiye kadar gönderilmiş olan soru (lar) olmasına rağmen, bence hiçbiri gerçek bir çözüm sunmuyor. Bunun nedeni SDL kütüphanesinin hata ayıklama özelliği ile derlenmiş olması gerçeğidir. SDL kitaplığı konsolu çıkışını nasıl devre dışı bırakabilirim? Diğer yazıların önerdiği gibi stdout/stderr'i bastırmak istemiyorum.

+1

İlgili: [Ubuntu hata izci bildirilen yıl önce] (https://bugs.launchpad.net/ubuntu/+source/pygame/+bug/1023153)/[Ayrıca pygame hata izci] (https: //bitbucket.org/pygame/pygame/issues/63) – sloth

cevap

1

Açıklanan başka bir yanıt olarak, SDL kaynağını kendiniz yeniden derlemediğiniz sürece, SDL, bir hata ayıklama özelliği bıraktıkları için stdout'a yazmaya çalışacaktır. Öncelikle stdout'u kapatan, SDL'yi tekrar çalan, stdout'u tekrar başlatan ve sonra değeri döndüren get_axis'e bir işlev yazmanızı öneririm. Şunlar gibi:

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

Bu, podgame 1.9.3'te giderilmiştir. En yeni oyunu kullanın ve bu gitti.

İlgili konular