繁体   English   中英

禁止pygame调试输出(控制台输出)

[英]Suppress pygame debug output (console output)

显然,我正在使用的pygame版本存在一个问题,其中保留了调试语句- 如何在Python中抑制控制台输出? 在使用joystick.get_axis 这就是问题所在,但是我一直无法尝试使用这些答案中介绍的方法。 每种方法仍会打印SDL_JoystickGetAxis value

我也尝试过此博客,但仍在输出到控制台。 考虑到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)

仍然输出调试语句

我不确定为什么您链接的博客中的代码不起作用,但是您始终可以将其放在代码顶部:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM