LoginSignup
4
1

More than 3 years have passed since last update.

Pythonのターミナル出力に色付けする。

Last updated at Posted at 2019-09-19

coloredlogsというモジュールを使用する。

pip install coloredlogs

単純なPRINTの色付け

import logging
import coloredlogs

class bcolors:
    # https://godoc.org/github.com/whitedevops/colors
    BGRED = '\033[41m'
    BGGREEN = '\033[42m'
    BGYELLOW = '\033[43m'
    BGBLUE = '\033[44m'
    BGMAGENDA = '\033[45m'
    BGCYAN = '\033[46m'
    RED = '\033[91m'
    GREEN = '\033[92m'
    YELLOW = '\033[93m'
    BLUE = '\033[94m'
    MAGENDA = '\033[95m'
    CYAN = '\033[96m'
    ENDC = '\033[0m'
    BOLD = '\033[1m'
    UNDERLINE = '\033[4m'


logger = logging.getLogger()
coloredlogs.install(level='DEBUG', logger=logger)

print(bcolors.BLUE + "------- Colored STDOUT Test -------" + bcolors.ENDC)

これで色付けされて出力されるはず。部分的な色付けも可能。

loggerとの組み合わせ

loggerと組み合わせて、ファイルに書き込みつつ、標準出力にも出す。

import logging
import coloredlogs

coloredlogs.CAN_USE_BOLD_FONT = True
coloredlogs.DEFAULT_FIELD_STYLES = {'asctime': {'color': 'green'},
                                    'hostname': {'color': 'magenta'},
                                    'levelname': {'color': 'black', 'bold': True},
                                    'name': {'color': 'blue'},
                                    'programname': {'color': 'cyan'}
                                    }
coloredlogs.DEFAULT_LEVEL_STYLES = {'critical': {'color': 'red', 'bold': True},
                                    'error': {'color': 'red'},
                                    'warning': {'color': 'yellow'},
                                    'notice': {'color': 'magenta'},
                                    'info': {},
                                    'debug': {'color': 'green'},
                                    'spam': {'color': 'green', 'faint': True},
                                    'success': {'color': 'green', 'bold': True},
                                    'verbose': {'color': 'blue'}
                                    }

logger = logging.getLogger(__file__)
coloredlogs.install(level='INFO', logger=logger, fmt='%(asctime)s : %(message)s', datefmt='%Y/%m/%d %H:%M:%S')
handler = logging.FileHandler('output.log', 'w', 'utf-8')
handler.setFormatter(logging.Formatter('%(asctime)s : %(levelname)s : %(message)s', datefmt='%Y/%m/%d %H:%M:%S'))
logger.addHandler(handler)

logger.error("This is ERROR!")
logger.warning("This is WARNING.")
logger.info("This is INFO.")
logger.debug("This is DEBUG..")  # Not Printed

DEFAULT_FIELD_STYLES、DEFAULT_LEVEL_STYLESを変更することで、特定の部分やログのレベルの色を変更することが可能。

デフォルト値などは以下のリンクを参照。
https://coloredlogs.readthedocs.io/en/latest/api.html#id24

課題

色+太字(color and bold)も可能らしいが、できない。

print(bcolors.BLUE + bcolors.BOLD +"------- Colored STDOUT Test -------" + bcolors.ENDC)

ただの青になる…

BOLDBLUE = '\033[1;94m'
print(bcolors.BOLDBLUE + "------- Colored STDOUT Test -------" + bcolors.ENDC)

ただの青になる…

>>> RED = '\033[91m'
>>> BOLD = '\033[1m'
>>> ENDC = '\033[0m'
>>> print(RED+'TEST'+ENDC)
TEST
>>> print(RED+BOLD+'TEST'+ENDC)
TEST

ここだと表現できないが、インタープリタで上記ならOK。調査中。

出力を標準出力にしたい

coloredlogs.installを行うとデフォルトではstderrがハンドラとして自動的に追加されるらしい。
そのため、正確にはこれは標準エラー出力に出ていると思うのだが、stream=sys.stdoutを指定すると、コンソール実行の場合うまく色がつかない…。調査中。

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1