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ツールでよく使われているテクニックです。
-
Pythonで文字列が特定のサブ文字列(プレフィックス)で始まるかどうかを確認する方法
startswith()メソッドを使う方法 Pythonでは、文字列クラスに標準で用意されているstartswith()メソッドを使うことで、文字列が指定したプレフィックス(接頭辞)で始まるかどうかを簡単に確認できます。このメソッドは、検索したいプレフィックス文字列を引数として受け取り、文字列オブジェクトに対して呼び出します。戻り値は真偽値(True / False)です。 >>> hello world.startswith(hell) True >>> Harry Potter.startswith(Harr) True >>> hel
-
Pythonで文字列が指定した接尾辞(サフィックス)で終わっているかどうかを確認する方法
endswith()メソッドを使う方法Pythonでは、文字列クラスに用意されている endswith() メソッドを使うことで、文字列が特定の接尾辞(サフィックス)で終わっているかどうかを簡単に確認できます。このメソッドは、検索したい接尾辞の文字列を引数として受け取り、文字列オブジェクトに対して呼び出します。以下のように使用します。string = C:/Users/TutorialsPoint1/~.py print(string.endswith(.py))実行結果:Trueこの例では、ファイルパスの文字列が .py という拡張子で終わっているため、True が返されます。もし終わってい