显然我正在使用的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)
仍然输出调试语句
答案 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