Udemy Pythonista ArgumentParser

Python学習【365日チャレンジ!】137日目のマスターU(@Udemy11)です。

今日は寒天を作ったのですが、指定されている水の量を倍にしてしまったので、しっかり固まらずにぷるんぷるんのわらび餅みたいになってしまいました。

わらび餅みたいだったので、きなこをかけると美味しいんじゃないかとおもって使ってみたところ、これまためっちゃ美味しくて、思わず食べすぎて後悔しています。

ほんと太るのって簡単なんですけど、痩せるのは難しいですよね。

それでは今日もPython学習を頑張りましょう!

昨日の復習

昨日は、コマンドライン引数について学習しました。

sysモジュールを使って、リスト型変数のsys.argvにコマンドラインから引数を渡すことができました。

実行ファイルの名前を第1引数で渡すことや数字も文字列の値にするので、コードで利用するには、整形が必要でした。

詳細は、昨日の記事をごらんください。

今日は、コマンドライン引数をもっと便利に使う方法を学習しましょう。

ArgumentParser

ArgumentParserは、昨日学習したコマンドライン引数をPythonの実行時にいろいろな形で受け取ることができるオブジェクトで、argparseをインポートして使用します。

受け取ることができる引数のオプションはたくさんあるので、一度Python公式ドキュメントをご覧になってみてください。

私が現在学習中の酒井さんの講座では、argparseではなく、optparseの解説がありました。

Udemy講師 酒井さん プログラミング Python

公式のアナウンスによるとoptparseは廃止予定とのことなので、公式ドキュメントのArgparse チュートリアルを参考にしながらargparse(ArgumentParser)を学習しました。

argparseを使う

Pythonistaでできないのかと思って調べてみるとargparseモジュールは標準ライブラリで、コマンドもStaShを使えばできそうなので、Pythonistaで実行してみました。

Pythonistaでコマンド入力ができるStaShのインストールについてはこのあたりの記事が参考になるかと思います。

それでは、argparseを使ってみましょう。

day0626.py

from argparse import ArgumentParser

parser = ArgumentParser()
parser.parse_args()

実行コマンド

python3 day0626.py --help

出力結果

usage: day0626.py [-h]

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

Pythonistaでコマンドを使うときは、StaShの実行ファイルである【launch_stash.py】を実行したあと、cdコマンドで【day0626.py】が保存されているディレクトリに移動してからコマンドを実行します。

ちなみに、PythonistaのStaShでPythonを実行するときは、3を付ける必要があります。

私の場合は【Mypython】ディレクトリにファイルを保存しているので、StaShを使っている状態は次のような感じになります。

Udemy Pythonista ArgumentParser

実行ファイルはparserオブジェクトを作って、parse_argsメソッドを実行しています。

parse_argsメソッドの実行により、--helpが返されて、help関数で表示される__doc__のような説明が表示されます。

出力結果については、usageが【使用法】という意味なので、【day0626.py】の-hの使い方、optional argumentsは、-h--helpで、このヘルプメッセージを表示して終了しますということを表示しています。

なので、コマンド入力の最後を--helpから-hに変えても同じ結果が表示されます。

引数を加える

コマンド入力から受け取れる引数を加えてみましょう。

day0626.py

from argparse import ArgumentParser

parser = ArgumentParser()
parser.add_argument('item', help='item is string you use here')
args = parser.parse_args()
print(args.item)

実行コマンド

python3 day0626.py -h

出力結果

usage: day0626.py [-h]

positional arguments:
  item        item is string you use here

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

ヘルプを表示すると、posithonal arguments(位置引数)が付け加えられています。

これは、4行目のadd.argumentによって、位置引数を加えたからですが、引数に値を入れるとどうなるでしょう

実行コマンド

python3 day0626.py something

出力結果

something

6行目のprint(args.item)によって、引数の値が表示されます。

引数で計算

次に、引数に数字を入れて計算をさせてみましょう。

day0626.py

from argparse import ArgumentParser

parser = ArgumentParser()
parser.add_argument('cube', 
                    help="show a cube of a given number", 
                    type=int)
args = parser.parse_args()
print(args.cube**3)

実行コマンド

python3 day0626.py 3

出力結果

27

add_argumentで追加する引数は、デフォルトでstring型となるため、6行目でタイプをintegerに指定しています。

そして、実行ファイルの最後の行で、受け取った引数の3乗を表示しています。

出力結果は、3の3乗である27になります。

コマンド入力の引数を-hにすると、位置引数が次のように追加されています。

positional arguments:
  cube        show a cub of a given number

Optional引数を追加

次にOptional引数を追加してみます。

day0626.py

from argparse import ArgumentParser

parser = ArgumentParser()
parser.add_argument('cube', 
                    help="show a cube of a given number",
                    type=int)
parser.add_argument("-v", "--verbose", 
                    action="store_true",
                    help="increase output verbosity")
args = parser.parse_args()
result = args.cube**3
if args.verbose:
    print('cube of {} is {}'.format(args.cube, result))
else:
    print(result)

実行コマンド

python3 day0626.py 2 -v

出力結果

cube of 2 is 8

7行目で、Optional引数として-verboseと省略した-vを指定しています。

helpについてはこれまで一緒ですが、新しくaction=store_trueを追加しています。

これはコマンド入力にOptional引数が指定されることでargs.verboseTrueを返すためで、Optional引数が指定されていなければ、Falseが返されるので、出力結果は8になります。

他にも機能があるけれど

ここまでArgumentParserを学習してきましたが、他にもいろいろな使い方がありますが、より詳しいことはPython公式ドキュメントを参考にしてみてください。

今回Arguparseチュートリアルを元に学習してきましたが、公式ドキュメントやチュートリアルを隅から隅までコンプリートしようと思うと莫大な時間がかかる割に、どんどん忘れていってしまうので、ものすごく効率が悪くなります。

なので、必要になった時に活用するようにしたほうが効率よくやりたいことができるようになります。

公式ドキュメントやチュートリアルは、あくまで辞書的な役割として活用したほうがいいでしょう。

ここまでで酒井さんの講座セクション11まで終了しました。

Udemy講師 酒井さん プログラミング Python

290レクチャーあるうちの134レクチャーなので、まだ半分も終了していませんが、最初に比べるとかなりPythonのコードが理解できるようになってきました。

今回のArgumentParserについても理解するまでにかなり時間がかかりましたが、ほんと

塵も積もればヤマトなる?!

とはこのことですね。

明日からも、コツコツと積み上げていこうと思います。

それでは明日もGood Python!