Подавить вывод отладки Pygame (вывод консоли)

Видимо, версия Pygame, которую я использую, имеет проблему, из-за которой операторы отладки были оставлены в - Как подавить вывод консоли в Python? при использовании joystick.get_axis, Это проблема, но мне не удалось использовать методы, представленные в этих ответах. Каждый из методов все еще печатал SDL_JoystickGetAxis value,

Я также попробовал этот блог, но я все еще выводил на консоль. Думая, что это может быть проблемой с 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)

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

2 ответа

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

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

Это работало для меня в Python 3.5 и Python 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
Другие вопросы по тегам