首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Python中抑制控制台输出?

如何在Python中抑制控制台输出?
EN

Stack Overflow用户
提问于 2010-01-24 10:44:00
回答 8查看 86.5K关注 0票数 44

我正在使用Pygame/SDL的操纵杆模块从游戏手柄获取输入。每次我调用它的get_hat()方法时,它都会打印到控制台。这是有问题的,因为我使用控制台来帮助我进行调试,而现在它每秒会被SDL_JoystickGetHat value:0:淹没60次。有什么方法可以禁用它吗?是通过Pygame/SDL中的一个选项还是在函数调用时抑制控制台输出?我在Pygame文档中没有看到这一点。

SDL:这是因为在编译库时打开了调试。

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2010-01-24 11:42:43

下面是来自joytick.c的相关代码块(通过http://svn.seul.org/viewcvs/viewvc.cgi/trunk/src/joystick.c?view=markup&revision=2652&root=PyGame上的SVN )

代码语言:javascript
复制
    value = SDL_JoystickGetHat (joy, _index);
#ifdef DEBUG
    printf("SDL_JoystickGetHat value:%d:\n", value);
#endif
    if (value & SDL_HAT_UP) {

看起来像是打开调试的问题。

票数 6
EN

Stack Overflow用户

发布于 2014-07-31 22:31:13

为了完整起见,这里有一个来自Dave Smith's blog的很好的解决方案

代码语言:javascript
复制
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

这样,您就可以在任何想要抑制输出的地方使用上下文管理:

代码语言:javascript
复制
print("Now you see it")
with suppress_stdout():
    print("Now you don't")
票数 55
EN

Stack Overflow用户

发布于 2017-09-03 15:47:18

为了完成查尔斯的回答,python中内置了两个上下文管理器,redirect_stdoutredirect_stderr,您可以使用它们将命令输出重定向和/或禁止输出到文件或StringIO变量。

代码语言:javascript
复制
import contextlib

with contextlib.redirect_stdout(None):
    do_thing()

有关更完整的解释,请阅读the docs

快速更新:在某些情况下传递None可能会引发一些引用错误(例如,keras.models.Model.fit调用sys.stdout.write,这将是有问题的),在这种情况下,传递io.StringIO()os.devnull

票数 25
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2125702

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档