Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonでスクリプトがターミナルに接続されているか確認する方法

isatty()関数を使った判定方法

Pythonでは、現在実行中のスクリプトがターミナル(端末)に接続されているかどうかを、sys.stdout.isatty()関数を使って簡単に確認できます。この関数は、標準出力がターミナルデバイスに直接接続されていれば True を返し、パイプやファイルなどにリダイレクトされている場合は False を返します。

import sys

if sys.stdout.isatty():
    print("Inside a terminal!")
else:
    print("Piped output")

上記のコードをターミナルから直接実行すると、次のような出力が得られます。

Inside a terminal!

パイプやリダイレクト時の動作

一方、出力を別のコマンドへパイプしたり、ファイルにリダイレクトして実行した場合には False が返されるため、「Piped output」と表示されます。

$ python script.py | cat
Piped output

標準入力・標準エラー出力のチェック

stdout だけでなく、標準入力や標準エラー出力についても同じ方法で確認できます。

import sys

sys.stdin.isatty()   # 標準入力がターミナルかどうか
sys.stderr.isatty()  # 標準エラー出力がターミナルかどうか

実用的な活用例

この判定は、対話的に実行されたときだけカラフルな出力や進捗バーを表示し、パイプやファイルへの出力時にはプレーンなテキストを出す、といった処理を実装する際に非常に便利です。例えば、ls コマンドのように、ターミナル接続時のみ色付き表示に切り替えるCLIツールでよく使われているテクニックです。

  1. Pythonで文字列が特定のサブ文字列(プレフィックス)で始まるかどうかを確認する方法

    startswith()メソッドを使う方法 Pythonでは、文字列クラスに標準で用意されているstartswith()メソッドを使うことで、文字列が指定したプレフィックス(接頭辞)で始まるかどうかを簡単に確認できます。このメソッドは、検索したいプレフィックス文字列を引数として受け取り、文字列オブジェクトに対して呼び出します。戻り値は真偽値(True / False)です。 >>> hello world.startswith(hell) True >>> Harry Potter.startswith(Harr) True >>> hel

  2. Pythonで文字列が指定した接尾辞(サフィックス)で終わっているかどうかを確認する方法

    endswith()メソッドを使う方法Pythonでは、文字列クラスに用意されている endswith() メソッドを使うことで、文字列が特定の接尾辞(サフィックス)で終わっているかどうかを簡単に確認できます。このメソッドは、検索したい接尾辞の文字列を引数として受け取り、文字列オブジェクトに対して呼び出します。以下のように使用します。string = C:/Users/TutorialsPoint1/~.py print(string.endswith(.py))実行結果:Trueこの例では、ファイルパスの文字列が .py という拡張子で終わっているため、True が返されます。もし終わってい