Подавить вывод отладки 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