1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

argparseの用法まとめ

Last updated at Posted at 2025-01-23

argparseの基本トピック

argparseの概要

argparsePythonスクリプトを実行する際に様々なオプションで実行できるようにコマンドラインから引数を与えるためのライブラリです。

import argparse
# https://docs.python.org/ja/3.13/library/argparse.html

parser = argparse.ArgumentParser()
parser.add_argument('--filename', help="filename")
args = parser.parse_args()

print(args)
print(args.filename)

たとえば上記のようなスクリプトをargparse1.pyに保存した場合、下記のように実行時の引数によってプログラムの出力が変わります。

・コマンド1

$ python argparse1.py

・実行結果1

Namespace(filename=None)
None

・コマンド2

$ python argparse1.py --filename test.txt

・実行結果2

Namespace(filename='test.txt')
test.txt

・コマンド3

$ python argparse1.py --filename argparse1.py

・実行結果3

Namespace(filename='argparse1.py')
argparse1.py

argparseの引数の型

DeepLearningの実装を行う場合にargparseに引数を追加して実行する場合などは多いと思います。このような際にエラーが生じやすいのがargparseの引数の型です。デフォルトでは引数がstr型なので数字を取り扱う際は下記のようにtype=inttype=floatを用いる必要があります。

argparse2
import argparse


parser = argparse.ArgumentParser()
parser.add_argument('--filename', help="filename")
parser.add_argument('--num_epoch1')
parser.add_argument('--num_epoch2', type=int)
parser.add_argument('--learning_rate1')
parser.add_argument('--learning_rate2', type=float)
args = parser.parse_args()

print(args)
print(type(args.filename))
print(type(args.num_epoch1))
print(type(args.num_epoch2))
print(type(args.learning_rate1))
print(type(args.learning_rate2))

・コマンド1

$ python argparse2.py

・実行結果1

Namespace(filename=None, num_epoch1=None, num_epoch2=None, learning_rate1=None, learning_rate2=None)
<class 'NoneType'>
<class 'NoneType'>
<class 'NoneType'>
<class 'NoneType'>
<class 'NoneType'>

・コマンド2

$ python argparse2.py --filename test.txt --num_epoch1 10 --num_epoch2 10 --learning_rate1 0.1 --learning_rate2 0.1

・実行結果2

Namespace(filename='test.txt', num_epoch1='10', num_epoch2=10, learning_rate1='0.1', learning_rate2=0.1)
<class 'str'>
<class 'str'>
<class 'int'>
<class 'str'>
<class 'float'>

実行結果より、parser.add_argumentの引数にtype=inttype=floatをしない場合は引数がstr型で取り扱われることが確認できます。typeの指定はつい抜けがちなので注意しておくとよいと思います。

引数のデフォルト値の設定

argparseでコマンドラインから引数を与えるにあたって、毎回同じ値を指定する場合は手間が発生します。この解決にあたっては、add_argumentdefault値を予め記載しておくと良いです。

argparse3
import argparse


parser = argparse.ArgumentParser()
parser.add_argument('--filename', help="filename")
parser.add_argument('--num_epoch', type=int, default=5)
parser.add_argument('--learning_rate', type=float, default=0.01)
args = parser.parse_args()

print(args.filename)
print(args.num_epoch)
print(args.learning_rate)

・コマンド1

$ python argparse3.py

・実行結果1

None
5
0.01

・コマンド2

$ python argparse3.py --filename test.txt --num_epoch 10 --learning_rate 0.1

・実行結果2

test.txt
10
0.1

実行結果より、defaultによってデフォルト値を指定しておくことで、引数の指定を省略して良いことが確認できます。

1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?