Python Tips: ターミナルのサイズを取得したい

Python でコマンドラインで利用するちょっとしたツールを作る場合には、現在のターミナルのウィンドウサイズを知りたくなることがあります。

たとえば、よくあるのは「出力を画面幅いっぱいになるようにきれいに出したいので、 1 行の文字数を知りたい」といったケースなどでしょうか。

Python でターミナルのサイズを取得したい場合は組みこみの shutil ライブラリの get_terminal_size() を使えば OK です。

使ってみます。

import shutil

terminal_size = shutil.get_terminal_size()

print(type(terminal_size))
# => <class 'os.terminal_size'>

print(terminal_size.columns)
# => 120 など( 1 行の長さ(文字数))

print(terminal_size.lines)
# => 40 など(行数)

print(terminal_size[0])
# => columns と同じ結果

print(terminal_size[1])
# => lines と同じ結果

get_terminal_size() の戻り値は os.terminal_size クラスの named tuple で、アトリビュートでも、インデックスでも値を抽出することができます。

便利です。

どうも、 os の方にも同名の os.get_terminal_size() という関数があって、これもまったく同じ結果を返しますが、公式のドキュメントによると、「 os.get_terminal_size はローレベルの実装であり、通常はハイレベルな shutil.get_terminal_size() を使いましょう」とのことです。このあたりの詳しい理由はわかりませんでした。。

shutil.get_terminal_size() is the high-level function which should normally be used, os.get_terminal_size is the low-level implementation.

参考