Pythonで引数を扱う
引数を扱うときに便利なのがParserです。簡単に引数を処理することができ、定義も簡単です。一度使えばsys.argvを直接処理する気なんてなくなるはずです。
PythonではいくつかParserの選択肢がありますがargparse一択だと思います。
標準ライブラリの選択肢
引数をParseする標準ライブラリにはgetopt、optparse、argpaseがあります。
getopt
- C 言語の getopt() 関数に慣れ親しんだ人向けの実装
- でもCを書ける人がargparseを学ぶ労力なんてゴミみたいなものじゃないかと
optparse
- getoptより少しだけコード量が少なくなる
- Python3.2 で非推奨になった
- 将来、廃止予定
argparse
- optparseの後継
- Python Tutorialのおすすめ
argparseの基本的な使い方
parser = argparse.ArgumentParser() parser.add_argument('-a', '--action', help='action for a file', required=True, choices=['show', 'delete']) parser.add_argument('-f', '--file', help='name of a file', required=True) args = parser.parse_args() print(args.action) print(args.file)
これだけで必須引数の有無確認、エラーやヘルプ表示などを自動で処理してくれます。
詳細はこちらで確認してください。
Argparse チュートリアル — Python 3.9.1 ドキュメント
感想
optparseは使ったことがありませんが、非推奨で廃止予定のものを今から使う理由はないと思います。
argparseをgetoptと比べるとヘルプ表示処理やいくつかのエラー処理を書かなくていい分、argparseの方が少し楽です。ただ劇的な差はない印象でした。
argparseにはなんでもできる柔軟性はありません。例えば「第一引数がAのときは第二引数はBかCで、第一引数がXのときは第二引数はYかZで、、」みたいな複雑な状況はargparseだけでは対応できません。ある程度の自分でコーディングする必要があります。
それでもsys.argvを直接処理するよりはかなり楽で、しかも標準ライブラリなので基本はこれでよいと思います。