10

クリック ( http://click.pocoo.org/3/ ) を使用してコマンド ライン アプリケーションを作成していますが、このアプリケーションのシェルを作成する方法がわかりません。test
というプログラムを書いていて、subtest1subtest2というコマンドがあるとします。

次のような端末から動作させることができました:

$ test subtest1
$ test subtest2

しかし、私が考えていたのはシェルなので、次のことができます:

$ test  
>> subtest1  
>> subtest2

これはクリックで可能ですか?

4

4 に答える 4

3

現在、ほとんどの作業を行う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.
于 2018-05-16T16:51:38.037 に答える