どーもTakeです。
この記事では、Pythonで「argparse」をつかってコマンドライン引数をより分かりやすくする方法について簡単に解説します。
「コマンドライン引数」とは、コマンドラインから Python ファイルを実行したときに指定する引数のことです。
例えば、Python の「test.py」を実行しようとします。
その場合、ファイル名の横に文字列を追加して実行することができます(下記でいう「123」です)。
この「123」がコマンドを実行する場合の引数(コマンドライン引数)です。
1 |
python test.py 123 |
これはソースコード内では下記のように「sys.argv」という変数で受け取ることが可能です。
1 2 3 4 |
import sys args = sys.argv print(args) |
「じゃあ、sys.argv でええやん!」ってなるかもしれませんが、
「argparse」を使えば、コマンドライン引数を必要とするソースコードに対して
実行時に注釈をつけたりすることができ、より明示的にわかりやすくすることができます!
この記事では「argparse」についてよりわかりやすく説明します!
- 「argparse」とは?具体例をつかって説明!
- コマンドライン引数を数字指定にする!
- 独自のオプション引数を導入!
「argparse」とは
「argsparse」とは Python 標準ライブラリのひとつで、
コマンドライン引数をよりわかりやすくするモジュールのことです。
例えば、下記のような「argsparse」をつかったソースコード(test.py)があるとします。
1 2 3 4 5 6 7 8 |
import argparse parse = argparse.ArgumentParser() parse.add_argument('args1', help='args1 : name') parse.add_argument('args2', help='args2 : number') args = parse.parse_args() print('args1 = '+ args.args1) print('args2 = '+ args.args2) |
上記は、「argsparse」モジュールをインポートさせ、「add_argument」メソッドで「args1」「args2」を指定します。
この「args1」「args2」がコマンドライン引数の格納先になります。
この test.py を実行すると(引数なし)、下記のような実行結果が表示されます。
1 2 3 |
C:\Users\ABC\Desktop>python test.py usage: test.py [-h] args1 args2 test.py: error: the following arguments are required: args1, args2 |
「-h」を付けて実行!
次に「-h」をつけて実行します(下記が実行結果)。
これは標準のオプションでこれをつけることで「実行する際にどういった引数が必要か?」説明してくれます。
この内容は「add_argument」メソッドの「help=」で定義した内容が表示されていることがわかります。
これが「argsparse」の良さです。
1 2 3 4 5 6 7 8 9 |
C:\Users\ABC\Desktop>python test.py -h usage: test.py [-h] args1 args2 positional arguments: args1 args1 : name args2 args2 : number optional arguments: -h, --help show this help message and exit |
つまり「argsparse」はコマンドライン引数に注釈をつけよりわかりやすくしてくれるモジュールです!
コマンドライン引数を数字指定にする!
コマンドライン引数は基本的に文字列になりますが、数字のみを入力したい場合があると思います。
例えば「python test.py 10」のように数字だけを受け付けたい場合があると思います。
その場合、「add_argument」メソッドに「type=int」と指定すればOKです!
1 2 3 4 5 6 7 8 |
import argparse parse = argparse.ArgumentParser() parse.add_argument('args1', help='args1 : name') parse.add_argument('args2', help='args2 : number', type=int) args = parse.parse_args() print('args1 = '+ args.args1) print('args2 = '+ str(args.args2)) |
これによりコマンドライン引数に「文字列」を指定して実行するとエラー表示が出力されるようになります。
下記は「python test.py aa aaa」と指定して実行した場合の例です。
1 2 3 4 5 6 |
C:\Users\ABC\Desktoppython test.py aa 10 args1 = aa Traceback (most recent call last): File "test.py", line 8, in <module> print('args2 = '+ args.args2) TypeError: can only concatenate str (not "int") to str |
独自のオプション引数を導入!
コマンドライン引数をよりよくしたいと思われている人で、
下記のように「オプションを付けたい!」と思われている人もいるのではないでしょうか?
1 |
C:\Users\ABC\Desktop>python test.py --test 2 |
上記は「--test」という独自のオプションを設定した場合の実行例です。
これは「add_argument」メソッドで簡単に実装できます!
1 2 3 4 5 6 7 8 9 10 11 |
import argparse parse = argparse.ArgumentParser() parse.add_argument('args1', help='args1 : name') parse.add_argument('args2', help='args2 : number') parse.add_argument("--test", help="test option") args = parse.parse_args() print('args1 = '+ args.args1) print('args2 = '+ args.args2) if args.test: print("test option") |
上記のように「parse.add_argument("--test", help="test option")」と記述することで
「--test」という独自のオプションをつけることができます。
そして「if args.test:」と条件式を追加することでコマンドラインに「--test」というオプションが存在する場合に
処理を実行させることができます。
下記実行結果になります。
1 2 3 4 |
C:\Users\ABC\Desktop>python test.py aaa 10 --test 1 args1 = aaa args2 = 10 test option |
ただし、「--test」のあとには必ず何らかの文字列を追加する必要があります。
例えば「python test --test 123」のように「123」を追加する必要があります。
オプションの後の値が不要の場合
オプションのあとの文字列を不要にしたい場合、
「add_argument」メソッド内で「action="store_true"」を追加すればOKです。
1 2 3 4 5 6 7 8 9 10 11 |
import argparse parse = argparse.ArgumentParser() parse.add_argument('args1', help='args1 : name') parse.add_argument('args2', help='args2 : number') parse.add_argument("--test", help="test option", action="store_true") args = parse.parse_args() print('args1 = '+ args.args1) print('args2 = '+ args.args2) if args.test: print("test option") |
「action="store_true"」を追加することでオプション後に文字列なしで実行できます。
1 2 3 4 |
C:\Users\ABC\Desktop>python test.py aaa 10 --test args1 = aaa args2 = 10 test option |
オプションを短くしたい場合
オプションを短くすることもできます。
下記のように「parse.add_argument("-t","--test", help="test option")」とすることで
独自のオプション「--test」の短縮形「-t」とすることができます。
1 2 3 4 5 6 7 8 9 10 11 |
import argparse parse = argparse.ArgumentParser() parse.add_argument('args1', help='args1 : name') parse.add_argument('args2', help='args2 : number') parse.add_argument("-t","--test", help="test option") args = parse.parse_args() print('args1 = '+ args.args1) print('args2 = '+ args.args2) if args.test: print("test option") |
この際、短縮形は「-」(ハイフン)を1つにしてください!
そうしないと正常に実行されません!
最後に
いかがでしたでしょうか?
この記事では、「argparse」をつかってコマンドライン引数をより分かりやすくする方法を解説しました。
プログラミングはさまざまなユーザが実行しますが、
どんな人でもわかりやすく使えるようにしてあげることが非常に重要です。
そんなときに「argparse」をつかってコマンドライン引数をわかりやすく「ユーザに優しいプログラム」を実現できます。
この記事を参考にコマンドライン引数を使いこなしよりよいプログラミング開発をしていただければ幸いです。
ではでは。