2024-06-06 17:03:41 发布
网友
我正在使用Pygame/SDL的操纵杆模块从游戏板获取输入。每次我调用它的get_hat()方法时,它都会打印到控制台。这是有问题的,因为我使用控制台来帮助我调试,现在它每秒被SDL_JoystickGetHat value:0:淹没60次。有没有办法让它失效?是通过Pygame/SDL中的一个选项,还是在函数调用时禁止控制台输出?我在Pygame文档中没有提到这个。
get_hat()
SDL_JoystickGetHat value:0:
编辑:这是由于编译SDL库时启用了调试。
下面是来自joystick.c的相关代码块(通过位于http://svn.seul.org/viewcvs/viewvc.cgi/trunk/src/joystick.c?view=markup&revision=2652&root=PyGame的SVN)
value = SDL_JoystickGetHat (joy, _index); #ifdef DEBUG printf("SDL_JoystickGetHat value:%d:\n", value); #endif if (value & SDL_HAT_UP) {
似乎是打开调试的问题。
为了完整起见,这里有一个来自Dave Smith's blog的很好的解决方案:
from contextlib import contextmanager import sys, os @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
使用此选项,可以在任何要禁止输出的位置使用上下文管理:
print("Now you see it") with suppress_stdout(): print("Now you don't")
你可以通过给空设备分配标准输出/错误(我不知道会是哪一个)来解决这个问题。在Python中,标准的out/error文件是sys.stdout/sys.stderr,空设备是os.devnull,因此
sys.stdout
sys.stderr
os.devnull
sys.stdout = open(os.devnull, "w") sys.stderr = open(os.devnull, "w")
这将完全禁用这些错误消息。不幸的是,这也将禁用所有控制台输出。要解决这个问题,请在调用方法get_hat()之前禁用输出,然后通过执行
sys.stdout = sys.__stdout__ sys.stderr = sys.__stderr__
将标准输出和错误恢复到其原始值。
下面是来自joystick.c的相关代码块(通过位于http://svn.seul.org/viewcvs/viewvc.cgi/trunk/src/joystick.c?view=markup&revision=2652&root=PyGame的SVN)
似乎是打开调试的问题。
为了完整起见,这里有一个来自Dave Smith's blog的很好的解决方案:
使用此选项,可以在任何要禁止输出的位置使用上下文管理:
你可以通过给空设备分配标准输出/错误(我不知道会是哪一个)来解决这个问题。在Python中,标准的out/error文件是
sys.stdout
/sys.stderr
,空设备是os.devnull
,因此这将完全禁用这些错误消息。不幸的是,这也将禁用所有控制台输出。要解决这个问题,请在调用方法
get_hat()
之前禁用输出,然后通过执行将标准输出和错误恢复到其原始值。
相关问题 更多 >
编程相关推荐