2018年7月22日日曜日

Pythonでprint()を一時的に使えなくする

Pythonのprintで出力してデバッグしているときなど、print機能を一時的に消したいと思うことがあります。そのやり方です。

https://stackoverflow.com/questions/8391411/suppress-calls-to-print-python#
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys, os
# Disable
def blockPrint():
    sys.stdout = open(os.devnull, 'w')
# Restore
def enablePrint():
    sys.stdout = sys.__stdout__
  
print ('This will print')
blockPrint()
print ("This won't")
enablePrint()
print ("This will too")
open(os.devnull, 'w')のos.devnullは、nullであるデバイス、という意味で、何もない所に出力する(=出力しない)、という設定です。

https://docs.python.org/3/library/os.html#os.devnull

その後、sys.__stdout__でデフォルト出力に戻しています。

Jupyterのときはデフォルトがipykernel.iostream.OutStreamとなっており、これに戻す方法が不明です。

なので、 
save_stdout =  sys.__stdout__
# Disable stdout
# ....
# return to default
sys.stdout = save_stdout
とやって戻しています。

ちなみに、logging機能でコンソールに出力にしておけば、loglevelの設定を変えて表示するしないを調節することができます。

0 件のコメント:

コメントを投稿