Python Tips: 出力を一時的に無効化したい

今回は Python で標準出力を一時的に無効化したい(=出力を捨てたい)ときの方法についてです。

早速結論ですが、まさにそのために用意されている os.devnull を利用すれば OK です。

Python 公式ドキュメントによると、 os.devnull は POSIX 準拠の OS では /dev/null を、 Windows では nul を指すとのことです。

この os.devnullcontextlib.redirect_stdout を組み合わせれば、対象の関数やメソッドの中身に手を加えることなく、一時的に出力を無効化することができます:

import os
from contextlib import redirect_stdout

def func_with_stdout():
    print('通常だとこれは標準出力に出力されます。')

# `通常だとこれは標準出力に出力されます。` が出力されない
with redirect_stdout(open(os.devnull, 'w')):
    func_with_stdout()

定形のイディオムとして覚えておくと便利です。

参考