Pygame/SDLのジョイスティックモジュールを使用して、ゲームパッドから入力を取得しています。 get_hat()
メソッドを呼び出すたびに、コンソールに出力されます。コンソールを使用してデバッグを行うと、毎秒60回SDL_JoystickGetHat value:0:
でフラッディングされるため、これは問題です。これを無効にする方法はありますか? Pygame/SDLのオプションを使用するか、関数の呼び出し中にコンソール出力を抑制しますか? Pygameのドキュメントでは、これについての言及はありませんでした。
編集:これは、SDLライブラリがコンパイルされたときにデバッグがオンになっていることが原因であることがわかります。
DebianまたはUbuntuマシンを使用している場合は、メッセージなしでpygameを再コンパイルするだけです。
cd /tmp
Sudo apt-get build-dep pygame
apt-get source pygame
vim pygame-1.9.1release+dfsg/src/joystick.c
# search for the printf("SDL.. messages and put a // in front
apt-get source --compile pygame
Sudo dpkg -i python-pygame_1.9.1release+dfsg-9ubuntu1_AMD64.deb
あいさつマックス
@charleslparkerの構築 answer :
_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")
_
テスト
_>>> with suppress_stdout():
os.system('play /mnt/Vancouver/programming/scripts/PHASER.WAV')
/mnt/Vancouver/programming/scripts/PHASER.WAV:
File Size: 1.84k Bit Rate: 90.4k
Encoding: Unsigned PCM
Channels: 1 @ 8-bit
Samplerate: 11025Hz
Replaygain: off
Duration: 00:00:00.16
In:100% 00:00:00.16 [00:00:00.00] Out:1.79k [!=====|=====!] Clip:0
Done.
_
これを使用して、os.system()
出力を完全に抑制します。
_>>> with suppress_stdout():
os.system('play /mnt/Vancouver/programming/scripts/PHASER.WAV >/dev/null 2>&1')
>>> ## successfully executed
>>> import time
>>> with suppress_stdout():
for i in range(3):
os.system('play /mnt/Vancouver/programming/scripts/PHASER.WAV >/dev/null 2>&1')
time.sleep(0.5)
>>> ## successfully executed
_
実行時間の長いスクリプトの完了を知らせるのに便利です(例)。