Python

【Python】コード実行時に値を引き渡す方法【コマンドライン引数】

この記事では、Pythonのコマンドライン引数について解説します。

コマンドライン引数を使うことでプログラム実行時に値を引き渡すことができます。それによりオプションを実行したりすることができます。

それでは、コマンドライン引数の使い方を見ていきましょう!

sys.argvを使う

コマンドライン引数を使用するには、sysモジュールのargvリストを参照します。

import sys

sys.argv

argvには以下のように値が格納されています。

argv[0]スクリプト名。フルパス名かどうかはOSによって異なります。
argv[1]以降コマンドライン引数

サンプル

実際にコマンドライン引数を受け取ってみましょう!

main.py

import sys

# 受け取ったコマンドライン引数をargs変数に代入
args = sys.argv

# スクリプト名
print(args[0])

# 第1引数
print(args[1])

# 第2引数
print(args[2])

このコードをターミナルから実行してみましょう!
実行時に「aaa」と「bbb」という値を渡しています。

実行

python3 main.py aaa bbb

実行結果

main.py
aaa
bbb

argparseを使う

argparseモジュールを使うことでより強力にコマンドライン引数を扱うことができます。

はじめに…

まずは一番基礎的なコードを実行して、結果を比べてみます。

prog.py

import argparse

parser = argparse.ArgumentParser()
parser.parse_args()

通常の実行

特になにも表示されません。

実行結果

$ python3 prog.py

ヘルプ

–helpまたは-hを付けることでヘルプが自動で表示されます。

実行結果

$ python3 prog.py --help
usage: prog.py [-h]

optional arguments:
  -h, --help  show this help message and exit

適当なオプション

適当なオプションを指定して実行すると、エラーが表示されます。

実行結果

$ python3 prog.py --option
usage: prog.py [-h]
prog.py: error: unrecognized arguments: --option

つまり、

  • ヘルプが表示される
  • エラーメッセージが表示される

ようになりました。

位置引数

位置引数を指定するには、add_argument()メソッドを使います。

prog.py

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('file')

args = parser.parse_args()
print(args.file)

通常の実行

エラーが表示されました。
内容を見てみるとfile引数がないことに対してエラーが出ています。

実行結果

$ python3 prog.py
usage: prog.py [-h] file
prog.py: error: the following arguments are required: file

ヘルプ

ヘルプを呼び出してみます。
先ほどとは異なりpositional argumentsが追加されています。

実行結果

$ python prog.py -h
usage: prog.py [-h] file

positional arguments:
  file

optional arguments:
  -h, --help  show this help message and exit

位置引数を渡す

実行時にhogeを渡したらhogeが表示されました!

実行結果

$ python prog.py hoge
hoge

このようにadd_argument()メソッドを使うことでお好みの変数名で位置引数を受け取ることができます。

位置引数として受け取った値はparse_args()メソッドで解析して、戻り値で返されたNamespaceオブジェクトから指定した変数名で値を受け取ることができます。

Optional引数

Optional引数はadd_argument()メソッドで変数を指定する際に「–」を付けることで指定することができます。

prog.py

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('--optional', help='オプショナル引数です')

args = parser.parse_args()
if args.optional:
    print(f'オプショナル引数: {args.optional}')

通常の呼び出し

オプショナル引数を指定せずに呼び出してみます。

実行結果

$ python prog.py

オプショナル引数なので指定しなくてもエラーは発生しません。

オプショナル引数に値を渡す

オプショナル引数にhogeを渡して実行してみます。

実行結果

$ python prog.py --optional hoge
オプショナル引数: hoge

arg.optionalにhogeを渡して、呼び出すことができました。

ヘルプ

ヘルプを実行してみます。

実行結果

$ python prog.py -h
usage: prog.py [-h] [--optional OPTIONAL]

optional arguments:
  -h, --help           show this help message and exit
  --optional OPTIONAL  オプショナル引数です

add_argument()メソッドでhelpを定義したので、その内容が表示されました。

オプショナル引数に値を渡さずに実行

オプショナル引数に値を渡さずに実行してみます。

実行結果

$ python prog.py --optional
usage: prog.py [-h] [--optional OPTIONAL]
prog.py: error: argument --optional: expected one argument

オプショナル引数に値を渡さなかったのでエラーが表示されました。オプショナル引数には値を1つ渡す必要があります。

詳細な設定

その他の細かな設定を見ていきましょう!

オプショナル引数が付いてるか付いてないか

action引数に‘store_true’を指定することで、オプショナル引数を付けるとTrueを受け取り、なければFalseを受け取るようにすることができます。

import argparse
parser = argparse.ArgumentParser()

# actionにstore_trueを指定する
parser.add_argument('--optional', action='store_true')

args = parser.parse_args()
if args.optional:
    print(f'オプショナル引数: {args.optional}')
else:
    print(f'オプショナル引数: {args.optional}')

実行結果

$ python prog.py --optional
オプショナル引数: True
$ python prog.py
オプショナル引数: False

短いオプション

短いオプション名を指定することができます。

import argparse

parser = argparse.ArgumentParser()

# 引数に指定するだけ
parser.add_argument('-o', '--optional', action='store_true')

args = parser.parse_args()
if args.optional:
    print(f'オプショナル引数: {args.optional}')

実行結果

$ python prog.py -o
オプショナル引数: True
$ python prog.py -h
usage: prog.py [-h] [-o]

optional arguments:
  -h, --help      show this help message and exit
  -o, --optional

ヘルプにも短いオプション名が追加されました。

型を指定する

type引数を指定することで引数として受け取る値の型を指定することができます。

import argparse

parser = argparse.ArgumentParser()

# typeに型を指定する
parser.add_argument('-o', '--optional', type=int)

args = parser.parse_args()
if args.optional:
    print(f'オプショナル引数: {args.optional} = {type(args.optional)}')

実行結果

$ python prog.py -o 1
オプショナル引数: 1 = 
$ python prog.py -o n
usage: prog.py [-h] [-o OPTIONAL]
prog.py: error: argument -o/--optional: invalid int value: 'n'

受け取れる値を制限

choise引数に受け取れる値を格納したイテラブルオブジェクトを渡すことで、その値以外受け取れないようにすることができます。

import argparse

parser = argparse.ArgumentParser()

# typeに型を指定する
parser.add_argument('-o', '--optional', type=int, choices=(0, 1, 2))

args = parser.parse_args()
if args.optional:
    print(f'オプショナル引数: {args.optional} = {type(args.optional)}')

実行結果

$ python prog.py -o 1
オプショナル引数: 1 = 
$ python prog.py -o 4
usage: prog.py [-h] [-o {0,1,2}]
prog.py: error: argument -o/--optional: invalid choice: 4 (choose from 0, 1, 2)

まとめ

この記事では、Pythonのコマンドライン引数の使い方を解説しました。

argparseモジュールを使うことでオプションがとても簡単に作成することができます。

それでは今回の内容はここまでです。ではまたどこかで〜( ・∀・)ノ

参考sys.argv – sys — システムパラメータと関数 — Python 3.9.1 ドキュメント

参考Argparse チュートリアル — Python 3.9.1 ドキュメント

最短3か月でエンジニア転職「DMM WEBCAMP COMMIT」
なんと転職成功率98%!
今なら3日以内のカウンセリング枠を予約&参加で「1,000円分のAmazonギフト券」をプレゼント!