Pythonでコマンドライン引数を取得する

Pythonでコマンドライン引数を取得する

Amazonのアソシエイトとして、ITナレッジライフは適格販売により収入を得ています。

記事の文字数:1,513 / 総アクセス数:44 views

Pythonでコマンドライン引数を取得する場合は、sysモジュールのargvを参照します。インデックスの1つ目がPythonファイル名で、2つ目以降からコマンドライン引数を参照することができます。入力チェックをする場合はargparseパッケージを利用することで簡単に実装することができます。

Pythonでコマンドライン引数を取得する場合は、sysモジュールのargvを参照します。
インデックスの1つ目がPythonファイル名で、2つ目以降からコマンドライン引数を参照することができます。
また、argparseモジュールを使うと入力チェック処理を実装することもできます。

動作環境

Python 3.12.7

コマンドライン引数の使い方(sys.argv)

コマンドライン引数とは、スクリプトを実行するときに外部から渡す値のことです。
Pythonでは、これらの引数をsys.argvを使って取得できます。

コマンドライン引数を渡す

引数を指定してPythonコードを実行する場合は、以下のように指定します。

構文

python [ファイル名].py [引数1] [引数2] [引数3]…

実行例

例えば、ターミナルやコマンドプロンプトで以下のようにPythonスクリプトを実行すると、argv-test.pyapple,banana,orange という引数が渡されます。

python argv-test.py apple banana orange

コマンドライン引数を受け取る

Pythonではargv[0]がargv-test.pyで、argv[1]以降がコマンドライン引数となります。

引数のインデックス

python argv-test.py apple banana orangeを実行した場合、引数とインデックスの紐づきは以下の通りとなります。

インデックス内容備考
0argv-test.py実行ファイル名
1apple第一引数
2banana第二引数
3orange第三引数

sys.argv[インデックス]で値を受け取ります。

コードサンプル

Pythonのsysモジュールに含まれるargvを使用し、コマンドライン引数をリストとして取得するサンプルコードです。

argv-test.py
import sys
# 引数のリストを取得
args = sys.argv
# スクリプト名を取得
script_name = args[0]
# 実際の引数(スクリプト名以降)を取得
parameters = args[1:]
print(f"スクリプト名: {script_name}")
print(f"引数: {parameters}")

実行例

以下サンプルコードの実行コマンドです。

実行コマンド
python argv-test.py apple banana orange

コマンドを実行すると次のような出力が得られます。

実行結果
スクリプト名: argv-test.py
引数: ['apple', 'banana', 'orange']

引数の数をチェックする

ユーザーが引数を正しく渡しているかをチェックすることは重要です。
以下のように、引数の数を確認することでエラーハンドリングが可能です。

argv-test2.py
import sys
if len(sys.argv) < 2:
print("エラー: 少なくとも1つの引数を指定してください。")
sys.exit(1)
print(f"入力された引数: {sys.argv[1:]}")

実行結果例

以下のように引数が足りないエラーメッセージが表示されました。

実行結果例
$ python argv-test2.py
エラー: 少なくとも1つの引数を指定してください。

argparseで入力チェックを実装

argparseモジュールを使うと、入力チェックを含めた実装が簡単にできます。

実装例

以下サンプルのソースコードになります。

argv-test.py
import argparse
# インスタンス作成
parser = argparse.ArgumentParser(
prog="サンプルプログラム",
usage="python argv-test.py <user_name:str> <password:str> <age:int>",
description="引数のチェックを行うプログラムです。",
epilog="以上",
add_help=True,
)
# 引数を設定する
parser.add_argument("user_name", type=str, help="ユーザ名")
parser.add_argument("password", type=str, help="パスワード")
parser.add_argument("age", type=int, help="年齢")
# 引数を解析する
args = parser.parse_args()
# argsから設定値を取得して、表示する。
print(f"ユーザ名: {args.user_name}")
print(f"パスワード: {args.password}")
print(f"年齢: {args.age}")

argparse.ArgumentParserのインスタンス引数は以下のように指定します。

引数説明設定例
progプログラム名を指定する。サンプルプログラム
usageプログラムの使用方法を記載する。python argv-test.py <user_name> <password> <age>
descriptionプログラムの説明文を記載する。引数のチェックを行うプログラムです。
epilogヘルプの最後に表示する文字列。以上
add_help-h/–-helpオプションの追加True or False

ヘルプ表示方法

-hまたは--helpを指定することで、ヘルプを表示することができます。(add_helpがTrueの場合)

ヘルプ表示
$ python argv-test.py -h
usage: python argv-test.py <user_name:str> <password:str> <age:int>
引数のチェックを行うプログラムです。
positional arguments:
user_name ユーザ名
password パスワード
age 年齢
options:
-h, --help show this help message and exit
以上

実行例(正常系)

テストプログラムの正常系の実行例です。

実行コマンド
python argv-test.py test_user password 21
実行結果
ユーザ名: test_user
パスワード: password
年齢: 21

実行例(異常系①)

年齢(第三引数)に文字列を指定した場合の挙動を確認しました。

実行コマンド
python argv-test.py test_user password aaa

年齢に数値を指定していないため、以下エラーメッセージが表示されました。

実行結果
usage: python argv-test.py <user_name:str> <password:str> <age:int>
サンプルプログラム: error: argument age: invalid int value: 'aaa'

実行結果例(異常系②)

年齢(第三引数)を指定しなかった場合の挙動を確認しました。

実行コマンド
python argv-test.py test_user password

年齢が必須である旨のエラーメッセージが表示されました。

実行結果
usage: python argv-test.py <user_name:str> <password:str> <age:int>
サンプルプログラム: error: the following arguments are required: age

まとめ

  • Pythonでコマンドライン引数を扱うには、sysモジュールのargvを利用する。
  • インデックス0は、実行ファイル名でインデックス1以降がコマンドライン引数となる。
  • 入力チェックや引数の指定方法を実装する場合は、argparseモジュールを利用すると便利。

Pythonユーザにお勧めの本

人気

スッキリわかるPython入門 第2版 スッキリわかるシリーズ

難易度
実用性
読みやすさ

対話形式でスラスラ読める。複雑な概念もキャラクターが分かりやすく解説してくれます。

独習Python

難易度
実用性
網羅性

言語仕様を深く解説。なんとなく書ける状態から、自信を持って書ける状態へ引き上げてくれます。

Python1年生 第2版 体験してわかる!会話でまなべる!プログラミングのしくみ

難易度
実用性
読みやすさ

イラスト中心で、プログラミングの楽しさを教えてくれる。ワクワクしながら学べる入門書です。


以上で本記事の解説を終わります。
よいITライフを!

Pythonユーザにお勧めの本

人気

スッキリわかるPython入門 第2版 スッキリわかるシリーズ

難易度
実用性
読みやすさ

対話形式でスラスラ読める。複雑な概念もキャラクターが分かりやすく解説してくれます。

人気記事


記事を評価

Thanks!
目次
Scroll to Top