2015-09-15 6 views
0

Очевидно, что версия pygame, которую я использую, имеет проблему, в которой операторы отладки остались в - How to suppress console output in Python? при использовании joystick.get_axis. В этом и есть проблема, но я не смог использовать методы, представленные в этих ответах. Каждый из методов все еще печатал SDL_JoystickGetAxis value.Подавление вывода отладки pygame (выход в консоль)

Я также пробовал this blog, но я все еще выводил на консоль. Думаю, это может быть проблема с stdout против stderr, я попытался подавить stdout, затем stderr, то и то и другое, но безрезультатно.

В основном мой код постоянно печатает SDL_JoystickGetAxis value:0 или независимо от его значения. Как я могу подавить эти отладочные заявления?

import os 
import sys 
from contextlib import contextmanager 

@contextmanager 
def suppress_stdout(): 
    with open(os.devnull, 'w') as devnull: 
     old_stdout = sys.stdout 
     sys.stdout = devnull 
     try: 
      yield 
     finally: 
      sys.stdout = old_stdout 

Позже в моем коде я использую эту функцию:

if speedchange == False and headingchange == False: 
     time.sleep(0.1) 
     with suppress_stdout(): 
      speed_ax = joys.get_axis(1) 
      head_ax = joys.get_axis(0) 

Какие еще выводит отладочные операторы

+0

Как вы используете этот код из этого блога? –

ответ

0

Я не уверен, почему код из блога вы связаны не работает , но вы всегда можете просто отбросить это вверху своего кода:

sys.stdout = os.devnull 
sys.stderr = os.devnull 

Если вам это нужно, сообщения об ошибках и т.п., вы можете просто сделать это:

sys.stdout = sys.__stdout__ 
sys.stderr = sys.__stderr__ 

Только в случае, если вы используете менеджер контекста, связанный в блоге неправильно, это то, как вы должны использовать:

with suppress_stdout(): 
    # Do blah foo and bar here 
+0

Я только что добавил код, который я использую на вопрос. Я думаю, что я правильно использую код блога, поэтому я не был уверен, есть ли у отладочных сообщений какие-то странные специальные свойства. Я также пробовал ваше решение, прокладывая часть 'joys.get_axis' между ними, что также не сработало. – Murphy

0

Это работало для меня в питона 3.5 и питона 2,7

import sys, os 
stdout = sys.__stdout__ 
stderr = sys.__stderr__ 
print("start") 
sys.stdout = open(os.devnull,'w') 
sys.stderr = open(os.devnull,'w') 
print("don't want") 
sys.stdout = stdout 
sys.stderr = stderr 
print("want") 

выход

start 
want 
Смежные вопросы