sys.argv / sys.exit() / sys.path
| 対応: | Python 2(2000) |
|---|
コマンドライン引数の取得・スクリプトの終了・モジュール検索パスなどを管理する『sys』モジュールの属性と関数です。
構文
import sys # コマンドライン引数のリスト(0番目がスクリプト名) sys.argv # スクリプトを終了する(終了コードを指定できる) sys.exit(0) # 正常終了 sys.exit(1) # 異常終了 # モジュールの検索パスのリスト sys.path # Pythonのバージョン文字列 sys.version # 実行環境のプラットフォーム sys.platform
属性・関数一覧
| 属性 / 関数 | 概要 |
|---|---|
| sys.argv | コマンドライン引数の文字列リストです。『sys.argv[0]』はスクリプト名、以降がユーザーが渡した引数になります。 |
| sys.exit(code) | スクリプトを終了します。終了コードに0を指定すると正常終了、1以上で異常終了を表します。 |
| sys.path | Pythonがモジュールを検索するディレクトリのリストです。リストに追加することで独自モジュールのパスを通せます。 |
| sys.version | 実行中のPythonのバージョン情報を文字列で返します。 |
| sys.version_info | バージョン情報をタプル形式で返します。バージョン比較に使えます。 |
| sys.platform | 実行環境を示す文字列を返します(例: 『linux』、『darwin』、『win32』)。 |
| sys.stdin / sys.stdout / sys.stderr | 標準入力・標準出力・標準エラー出力のファイルオブジェクトです。 |
サンプルコード
sys_argv_basic.py
import sys print(sys.argv[0]) print(sys.argv[1]) print(sys.argv[2]) print(len(sys.argv))
実行すると次のように出力されます。
python3 sys_argv_basic.py hello 42 sys_argv_basic.py hello 42 3
sys_argv_validate.py
import sys
if len(sys.argv) < 3:
print('使い方: python3 sys_argv_validate.py <名前> <年齢>', file=sys.stderr)
sys.exit(1)
name = sys.argv[1]
age = int(sys.argv[2])
print(f'名前: {name}, 年齢: {age}')
実行すると次のように出力されます。
python3 sys_argv_validate.py 使い方: python3 sys_argv_validate.py <名前> <年齢>
実行すると次のように出力されます。
python3 sys_argv_validate.py "Light Yagami" 17 名前: Light Yagami, 年齢: 17
sys_info.py
import sys
print(sys.version)
if sys.version_info >= (3, 10):
print('Python 3.10以降です。match文が使えます。')
if sys.platform == 'win32':
print('Windowsで実行中です。')
elif sys.platform == 'darwin':
print('macOSで実行中です。')
else:
print('Linuxで実行中です。')
print('エラーが発生しました。', file=sys.stderr)
実行すると次のように出力されます。
python3 sys_info.py 3.12.4 (main, Jun 6 2024, 18:26:44) Python 3.10以降です。match文が使えます。 macOSで実行中です。
よくあるミス
よくあるミス1: 引数の数を確認せずにアクセスする
引数が渡されているか確認せずに『sys.argv[1]』などにアクセスすると、引数なしで実行した場合に『IndexError』が発生します。事前に引数の数を確認するか、try/exceptで捕捉します。
import sys
filename = sys.argv[1]
print(f'ファイル: {filename}')
次のように記述します。
import sys
if len(sys.argv) < 2:
print('使い方: python3 mistake1_ok.py <ファイル名>', file=sys.stderr)
sys.exit(1)
filename = sys.argv[1]
print(f'ファイル: {filename}')
よくあるミス2: 引数を数値のまま使おうとする
コマンドライン引数はすべて文字列として格納されます。数値として使いたい場合は『int()』や『float()』で変換できます。変換せずに算術演算を行うと『TypeError』が発生します。
import sys score = sys.argv[1] print(score + 10)
次のように記述します。
import sys score = int(sys.argv[1]) print(score + 10)
概要
『sys.argv』はコマンドラインからスクリプトに引数を渡すための基本的な仕組みです。すべての引数は文字列として格納されるため、数値として扱う場合は『int()』や『float()』で変換できます。より複雑な引数処理が必要な場合は標準ライブラリの『argparse』モジュールを使うと、ヘルプメッセージの自動生成や型変換・省略可能な引数などを簡単に実装できます。
『sys.exit()』は内部的に『SystemExit』例外を発生させます。そのため『try/except』で捕捉することも可能ですが、通常は捕捉せずにスクリプトを終了する処理を書けます。終了コードはシェルスクリプトやCI/CDシステムが成功・失敗の判定に使います。エラー時は必ず0以外のコードで終了してください。
環境変数の取得は『os.environ / os.getenv()』を参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。