paloma blog

NWエンジニアやってます。主に自宅環境のお遊びを書きます。Pythonもちょっと。タイトルは好きなカクテルから。

本当はやりたかったpythonの引数処理でのdry run

前回の映画視聴ツールの改修でやむなくフローの途中にechoを挟みましたが、
本当にやりたかったのは引数で出力を分岐させるというものです。

もともとpythonでやろうとして調べたのですが、このまま眠らせると忘れそうなので残しておきます。

argparseモジュール

通常の引数処理なら何個めの引数がこの場合うんたらかんたら...の処理を書くと思いますが
pythonには組み込みでargparseという引数解析のライブラリが付いてきます。

これを使って作ってみましょう。

コード

引数の有無で分岐させるという簡単な内容です。

masashi@PC-ubuntu:~$ cat dryrun.py
import argparse

parser = argparse.ArgumentParser()
parser.add_argument('--dry-run', help='Pre-execution',
                    action='store_true')
args = parser.parse_args()

if args.dry_run:
    print('映画情報の出力')
    print('この内容で投稿しますか?')
else:
    print('投稿しました!')

実行

  • ヘルプ

自動でヘルプ機能、ヘルプ文が作成されます。
便利ですね。

masashi@PC-ubuntu:~$ python3 dryrun.py --help
usage: dryrun.py [-h] [--dry-run]

optional arguments:
  -h, --help  show this help message and exit
  --dry-run   Pre-execution
  • dry run
masashi@PC-ubuntu:~$ python3 dryrun.py --dry-run
映画情報の出力
この内容で投稿しますか?

--dry-runの引数を付けると内容を出力させて確認できます。
投稿は行いません。

  • post
masashi@PC-ubuntu:~$ python3 dryrun.py
投稿しました!

引数なしだと今まで通り投稿を実行します。

この形にしたかったんだよ。

メモ

  • 構文

この辺はお約束の構文です。

parser = argparse.ArgumentParser()
parser.add_argument('--dry-run', help='Pre-execution',
                    action='store_true')
args = parser.parse_args()

引数のアクションをstore_trueにするとフラグとして扱われるようになります。

これが無いと値を取る引数として認識されます。
store_trueをつけておかないと上記の使い方ができません。

store_true無しの場合引数を求められます。

masashi@PC-ubuntu:~$ python3 dryrun.py --dry-run
usage: dryrun.py [-h] [--dry-run DRY_RUN]
dryrun.py: error: argument --dry-run: expected one argument
  • 作成した引数の指定

add_argumentで定義した引数名の先頭のハイフンを抜いたものに変換されるようです。
間のハイフンはアンダーバーになります。

parser.add_argument('--dry-run'

--dry-runが

if args.dry_run:

dry_runとして呼び出せるということですね。

まとめ

似たようなライブラリでclickというのがあるのですがインストールが必要なので今回はargparseで確認しました。
使っているツールには導入できなかったので簡単な検証になってしまいましたが、機会があれば活用したいと思います。

引数の処理ができるようになるとCLIのツールでも幅が広がりますね。

参考サイト

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

Welcome to Click — Click Documentation (7.x)