📖
pythonでコンソール表示に色をつけたり書き換えたりする
何気なく使っているprintやpprintですが、これらはコンソール画面で時系列に流れていってしまうため、見づらいときがあります。
コンソールに色をつけたり書き換えたりすることで、格段に見やすくなります
$ python -V
python3.12.7
pythonでカーソルを操作する
コンソール画面で、Enterキーや矢印キーを押すとカーソル位置を移動させることができますが、pythonからでもこれを実行できます。
やり方としては、sys.stdout.write()を用いて、引数にANSIエクケープシーケンスを入れます。
import sys
# カーソルをひとつ上に移動
sys.stdout.write('\033[1A')
よく使うANSIエスケープシーケンス
カーソルを指定方向にN個移動: \033[{N}A
Aは上、Bは下、Cは右、Dは左
例: \033[2A はカーソルを2行上に移動します。
カーソルを指定位置に移動: \033[{row};{col}H
例: \033[5;10H はカーソルを5行目・10列目に移動します。
行全体をクリア: \033[2K
現在の行をすべてクリアし、カーソルの位置はそのままです。
カーソルを行の先頭に移動: \033[G
現在の行の先頭にカーソルを移動します。
文字に色をつける
ANSIエスケープシークエンスで色をつける方法もありますが、termcolorというライブラリを使ったほうが読みやすく書けます
from termcolor import cprint
cprint('test', 'cyan', end='') #endは標準では'\n'で改行される。''を指定すると改行されない
実例
import os
import sys
import time
from datetime import datetime
from termcolor import cprint
if __name__ == '__main__':
# 開始前にコンソール画面をクリアにする。windowsの場合は'cls'
os.system('clear')
# 初回の出力
cprint('test1', 'green') # 最初の行に表示
cprint(datetime.now().strftime("%H:%M:%S"), 'red') # 現在時刻を2行目に表示
cprint('test2', 'green') # 最後の行に表示
# カーソルを2行目1列目に持ってくる
sys.stdout.write('\033[2;1H)') # 1行上(現在時刻の行)にカーソルを移動
for i in range(10):
current_time = datetime.now()
h,m,s = [current_time.hour, current_time.minute, current_time.second]
# カーソルを2行目1列目に持っていたあと、その行をクリア
sys.stdout.write('\033[G\033[2K') # 1行上(現在時刻の行)にカーソルを移動してクリア
# 現在時刻の更新
cprint(f'{h}:{m}:{s}', 'red', end='') # 同じ位置に現在時刻を上書き
# 標準出力のフラッシュ
sys.stdout.flush()
time.sleep(0.5)
# 終了後にカーソルを一番下に持ってきて、改行
sys.stdout.write('\033[1B\n')
Discussion