今のところ、以下のようなコマンドを考えています。
| コマンド名 | 機能 |
|---|---|
| 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マニュアルを最初から読み込むことにします。