いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

Pythonメモ-88 (ターミナルの行列のサイズを取得)(get_terminal_size, terminal_size, 3.3 以降)

概要

ターミナルのサイズが知りたいときがあって、最終的にめっちゃ簡単に取得できたので忘れない内にメモメモ。

最初、以下の gist を発見。

Get current terminal size on Linux, Mac, and Windows · GitHub

結構大変やん・・って思ってたら、以下のコメント発見。

Note that there is python standard lib function for this now: os.get_terminal_size()

Get current terminal size on Linux, Mac, and Windows · GitHub

あ、os.get_terminal_size() なんて素敵なものがあるのねってことで

docs.python.org

みると

通常は高水準関数である shutil.get_terminal_size() を使用してください。os.get_terminal_size は低水準の実装です。

って書いてありました。なので、shutil 側を見る

docs.python.org

戻り値は、os.terminal_size 型。 Python 3.3 から追加されたみたいですね。知らなかったです。

サンプル

てことで、サンプル.

"""
ターミナルの行列のサイズを取得するサンプルです。

REFERENCES: http://bit.ly/2Vw6asZ
            http://bit.ly/2VutNSI
            http://bit.ly/2VsJOZi
            http://bit.ly/2VrpMhR
"""
import shutil
from os import terminal_size

from trypython.common.commoncls import SampleBase
from trypython.common.commonfunc import pr


class Sample(SampleBase):
    def exec(self):
        # ----------------------------------------------------------
        # shutil.get_terminal_size() を利用することで
        # 現在実行しているターミナルの行と列のサイズを取得することができる。
        #
        # shutil.get_terminal_size() は、内部で os.get_teminal_size()
        # を呼び出すようになっている。
        #
        # 戻り値は、 os.terminal_size オブジェクト
        #
        # 対応しているOSは、 unix, windows となっている。
        # この関数が追加されたのは、 python 3.3
        # ----------------------------------------------------------
        ts: terminal_size = shutil.get_terminal_size()
        pr('terminal size', ts)
        pr('\tcolumns', ts.columns)
        pr('\tlines', ts.lines)


def go():
    obj = Sample()
    obj.exec()


if __name__ == '__main__':
    go()

try-python/terminalsize01.py at master · devlights/try-python · GitHub

pycharm上で実行したら

terminal size=os.terminal_size(columns=80, lines=24)
    columns=80
    lines=24

ってなって、ちょっとウィンドウ大きくしておいたコマンドプロンプトで実行したら

terminal size=os.terminal_size(columns=150, lines=40)
        columns=150
        lines=40

ってなりました。ちゃんと取れてますね。いやー便利これ。


過去の記事については、以下のページからご参照下さい。

  • いろいろ備忘録日記まとめ

devlights.github.io

サンプルコードは、以下の場所で公開しています。

  • いろいろ備忘録日記サンプルソース置き場

github.com

github.com