現在、ほとんどの作業を行うclick_replというライブラリがあります。これを機能させるための私の努力を共有したいと思いました。
1 つの問題は、特定のコマンドをコマンドにする必要があることですが、repl
@fpbhb のアプローチを転用して、別のコマンドが提供されていない場合にデフォルトでそのコマンドを呼び出せるようにすることができます。
これは、すべてのクリック オプションとコマンド履歴をサポートし、REPL を入力せずにコマンドを直接呼び出すことができる、完全に機能する例です。
import click
import click_repl
import os
from prompt_toolkit.history import FileHistory
@click.group(invoke_without_command=True)
@click.pass_context
def cli(ctx):
"""Pleasantries CLI"""
if ctx.invoked_subcommand is None:
ctx.invoke(repl)
@cli.command()
@click.option('--name', default='world')
def hello(name):
"""Say hello"""
click.echo('Hello, {}!'.format(name))
@cli.command()
@click.option('--name', default='moon')
def goodnight(name):
"""Say goodnight"""
click.echo('Goodnight, {}.'.format(name))
@cli.command()
def repl():
"""Start an interactive session"""
prompt_kwargs = {
'history': FileHistory(os.path.expanduser('~/.repl_history'))
}
click_repl.repl(click.get_current_context(), prompt_kwargs=prompt_kwargs)
if __name__ == '__main__':
cli(obj={})
REPL を使用すると、次のようになります。
$ python pleasantries.py
> hello
Hello, world!
> goodnight --name fpbhb
Goodnight, fpbhb.
コマンドラインサブコマンドを直接使用するには:
$ python pleasntries.py goodnight
Goodnight, moon.