argparseだるいし。関数の定義からコマンド生成すれば良いのでは?

要旨は以下

  • 関数の引数の定義から大まかなデフォルト値とコマンドライン引数を取得
  • sphinxのautodoc形式のdocstringからヘルプメッセージを作成

以下の様にすると greeting() が関数からコマンドになる。

# -*- coding:utf-8 -*-
from cmdfromfn import as_command


@as_command
def greeting(message, is_surprised=False, name="foo"):
    """ greeting message

    :param message: message of greeting
    :param is_surprised: surprised or not (default=False)
    :param name: the actor name
    """
    suffix = "!" if is_surprised else ""
    print("{name}: {message}{suffix}".format(name=name, message=message, suffix=suffix))

gist

gistba9d1aa7dac23448b915