今のところ、以下のようなコマンドを考えています。
コマンド名 | 機能 |
---|---|
site | サイトのテンプレートを生成する |
page | サイトの中にページディレクトリを作成する |
build | サイトディレクトリの内容を元にHTMLファイルを生成する |
これを踏まえて、sohtml.pyにPythonコードを書いていきます。
(ファイル名) sohtml.py
from argparse import ArgumentParser as ap import html_tag def main(): parser = ap() cmd_choices = ['site', 'page', 'html'] parser.add_argument("command", help="command", choices=cmd_choices) parser.add_argument("name") args = parser.parse_args() if args.command == 'site': print('デフォルトサイト{}を作成します'.format(args.name)) elif args.command == 'page': print('ページ{}を作成します'.format(args.name)) elif args.command == 'html': print('HTMLファイルを{}ディレクトリに生成します'.format(args.name)) if __name__ == '__main__': main()
ところが、このプログラムだとコマンドライン引数に「build」を指定した時も、ダミーの引数を後に続けないとエラーになってしまいます。
❏buildだけのとき
$ sohtml build usage: sohtml [-h] {site,page,build} name sohtml: error: the following arguments are required: name
❏buildにダミー引数をつけた時
$ sohtml build hoge HTMLファイルを生成します
buildを指定した時は、nameに相当する引数を指定しなくてもいいようにしたいのです。
残念ながら、Argparse チュートリアルには書いていませんでした。
しょうがないので、argparseマニュアルを最初から読み込むことにします。