抑制pygame调试输出(控制台输出)

时间:2015-09-15 15:18:51

标签: python python-2.7 console pygame suppress

显然我正在使用的pygame版本存在一个问题,即使用joystick.get_axis时调试语句留在了How to suppress console output in Python?。这就是问题所在,但我尝试使用这些答案中提供的方法却没有成功。每种方法仍然打印SDL_JoystickGetAxis value

我也试过了this blog,但我还在输出到控制台。考虑到stdout vs 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 个答案:

答案 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

答案 1 :(得分:0)

这在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