簡體   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