10
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[Python]コマンドライン引数を受け取る方法

Last updated at Posted at 2023-04-03

はじめに

Pythonでコマンドライン引数を受け取るには、標準モジュールsysのargvを使う方法と、標準モジュールargparseを使う方法があります。それぞれの使い方について簡単にまとめてみました。

  • 動作環境
    • Python 3.11

sys.argv

sys.argvを使う場合、コマンドライン引数が文字列のリストとして sys.argvに渡されます。sys.argv[0]が実行されたpyファイルのファイル名です。

sys.argvを出力してみます。

main.py
import sys
print(sys.argv)
$ python3 main.py arg1 arg2
stdout
['main.py', 'arg1', 'arg2']

引数が足りない場合はIndexErrorが発生します。

main.py
import sys
print(sys.argv[1])
$ python3 main.py
stdout
IndexError: list index out of range

そのため、エラーメッセージやhelpメッセージを表示したい場合は、自分で実装する必要があります。

import sys

if len(sys.argv) == 3:
    file_name = sys.argv[1]
    password = sys.argv[2]
    print(f"File name: {file_name}, Password: {password}")
else:
    print("Usage: python main.py <file_name> <password>")

argparse

argparseモジュールを使うと、helpメッセージなどを表示してくれるので、より柔軟で分かりやすく記述することができます。

main.py
import argparse

# argparse.ArgumentParserクラスをインスタンス化して、説明等を引数として渡す
parser = argparse.ArgumentParser(
    prog="sample",  # プログラム名
    usage="python main.py <file_name> <password>", # プログラムの利用方法
    description="sample script.", # ヘルプの前に表示
    epilog="end", # ヘルプの後に表示
    add_help=True, # -h/–-helpオプションの追加
)

# 引数の設定
parser.add_argument("file_name", type=str, help="File name")
parser.add_argument("password", type=str, help="Password")

# 引数の解析
args = parser.parse_args()

print(f"File name: {args.file_name}, Password: {args.password}")
$ python3 main.py samplefile 123
stdout
File name: samplefile, Password: 123

引数が正しくないと、エラーメッセージ等が表示されます。

$ python3 main.py samplefile
stdout
usage: python main.py <file_name> <password>
sample: error: the following arguments are required: password

helpオプションが設定されている場合、-h(--help)オプションを指定すると、helpメッセージが表示されます。

$ python3 main.py -h
stdout
usage: python main.py <file_name> <password>

sample script.

positional arguments:
  file_name   File name
  password    Password

options:
  -h, --help  show this help message and exit

end

また、位置引数かオプション引数かも指定できます。オプション引数には接頭辞---を付ける必要があり、実行時に引数を指定する場所はどこでも構いません。

# 引数の設定
parser.add_argument("-f", "--file", type=str, help="File name")
parser.add_argument("-p", "--passwd", type=str, help="Password")

# 引数の解析
args = parser.parse_args()

print(f"File name: {args.file}, Password: {args.passwd}")
$ python3 main.py -f samplefile -p 123
stdout
File name: samplefile, Password: 123

その他の使い方について公式ドキュメント等をご参照ください。

おわりに

今回はPython標準モジュールsysのargvとargparseを使ったコマンドライン引数の受け取り方について簡単にまとめてみました。詳しい使い方が気にある方がいらっしゃいましたら、公式ドキュメント等をご参照ください。

10
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?