どん底から這い上がるまでの記録

どん底から這い上がりたいけど這い上がれない人がいろいろ書くブログ(主にプログラミング)

argparseを使ってみる。

今回はpythonに標準で入っているコマンドラインオプション、引数を扱えるライブラリのargparseについて書いてみます。自分が使いたかった機能にしぼってまとめています。

 

環境

関連リンク

16.4. argparse — コマンドラインオプション、引数、サブコマンドのパーサー — Python 3.6.5 ドキュメント

Argparse チュートリアル — Python 3.6.5 ドキュメント

argparse

argparseはpythonに標準で入っているライブラリでプログラムを実行するときにオプションを指定して引数を渡すことができます。

argparseを使うことにより、ヘルプや使用方法のメッセージを生成し表示してくれます。

まずは使ってみる。

argparseをインポートします。

import argparse

次に、argparseにあるArgumentParserインスタンスを生成します。

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

生成したインスタンスparserからparse_args()を呼び出すと、コマンドラインの引数とオプションを解析してくれます。

試しに、以下のmain.pyを実行してみます。

main.py

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

上のプログラムを動かしてみます。

$ python main.py

はい、何も起きません表示されません。

オプションを指定して実行してみます。

$ python main.py -h
usage: main.py [-h]

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

-hまたは--helpは特別なオプションでプログラムに書かなくてもヘルプメッセージが出力されます。今はプログラムでオプションの設定はしていないので、python main.py --exeなどとするとエラーが出ます。

-hまたは--helpを指定するとヘルプメッセージが出力されるだけでプログラムは実行されません。

オプションの設定をする。

ArgumentParserにあるadd_argument()を使ってオプションの設定をします。

オプションを設定をするには、add_argument()の第一引数の先頭に-を付ける必要があります。付けなければオプションにならずに位置引数というものになります。

add_argument

add_argumentの引数は以下の通りです。

  • name or flags(名前またはオプション文字列のリスト)
  • action
  • nargs
  • const
  • default(引数が指定されていないときに生成される値)
  • type(引数が変換されるべき型、デフォルトは文字列)
  • choices
  • required(オプションが省略可能かどうか)
  • help(引数についての説明)
  • metavar
  • dest

かなり引数があります。この中でも自分が使いたい引数には説明を入れています。

使ってみる。

add_argumentを使ってみます。main.pyを以下のように書き換えます。

import argparse
parser = argparse.ArgumentParser()

parser.add_argument(
    '-v', '--version',
    default="v0.0",
    type=str,
    help="バージョンを表示する。"
)

parser.add_argument(
    '--x',
    type=int,
    required=True,
    help="x * x == ?"
)

args = parser.parse_args()

上のプログラムではバージョンを表示する機能と渡された値を2乗したいなぁという機能を入れました。今のままでは上のプログラムを動かしても何も起きません。

argsにはArgumentParserのインスタンスであるparserからparse_args()を呼び出し、プログラムを実行したときのコマンドラインの引数とオプションを解析した結果が入っています。

そのため、オプションの中身にアクセスするためには以下のようにします。

print(args.version) #ex. v0.1
print(args.x**2) #ex. 9

ちなみに、args.vとするとエラーが出ます。オプションの中身にアクセスする場合は-を先頭に2個つける必要があるようです。

ソースコード

main.py

import argparse
parser = argparse.ArgumentParser()

parser.add_argument(
    '-v', '--version',
    default="v0.0",
    type=str,
    help="バージョンを表示する。"
)

parser.add_argument(
    '--x',
    type=int,
    required=True,
    help="x * x == ?"
)

args = parser.parse_args()
print(args.version)
print(args.x**2)

オプションの指定例

以下はmain.pyにオプション指定して実行した結果です。オプションxにrequiredを設定しているので何も渡さなければエラーが出ます。

$ python main.py -v v0.1 --x 2
v0.1
4
$ python main.py --version v0.2 --x 0
v0.2
0
$ python main.py --x 10
v0.0
100

おわりに

今回はargparseについて勉強してみました。自分が使いたかった機能のみにしぼって書いたので、まだまだ知らないことがあると思います。今後新しい発見などがあったときに記事を更新していく予定です。