1. ホーム
  2. python

[解決済み] Pythonで標準出力を "nothing "にリダイレクトする方法

2022-05-10 22:35:25

質問

十分な数のモジュールからなる大規模なプロジェクトがあり、それぞれが標準出力に何かを出力しています。現在、プロジェクトの規模が大きくなるにつれて、大量の print ステートメントが標準出力に大量に出力され、プログラムがかなり遅くなっています。

そこで、私は今 実行時 を決定したいのです。モジュールがたくさんあるので、モジュールを変更することはできません。(stdoutをファイルにリダイレクトできることは知っていますが、これでもかなり遅いのです)。

そこで私の質問は、どうすれば標準出力を何もないところにリダイレクトできるのか、つまり、どうすれば標準出力を print ステートメントが何もしないようにするにはどうしたらよいでしょうか?

# I want to do something like this.
sys.stdout = None         # this obviously will give an error as Nonetype object does not have any write method.

現在、私が持っている唯一のアイデアは、書き込みメソッド(何もしない)を持つクラスを作り、このクラスのインスタンスにstdoutをリダイレクトすることです。

class DontPrint(object):
    def write(*args): pass

dp = DontPrint()
sys.stdout = dp

このためのpythonに組み込まれたメカニズムはありますか?または、これより良いものがありますか?

どのように解決するのですか?

クロスプラットフォームです。

import os
import sys
f = open(os.devnull, 'w')
sys.stdout = f

Windowsの場合。

f = open('nul', 'w')
sys.stdout = f

Linuxの場合。

f = open('/dev/null', 'w')
sys.stdout = f