Installation is done via pip:
pip install click-repl
In your click app:
import click from click_repl import register_repl @click.group() def cli(): pass @cli.command() def hello(): click.echo("Hello world!") register_repl(cli) cli()
In the shell:
$ my_app repl > hello Hello world! > ^C $ echo hello | my_app repl Hello world!
Features not shown:
- Tab-completion.
- The parent context is reused, which means
ctx.obj
persists between subcommands. If you're keeping caches on that object (like I do), using the app's repl instead of the shell is a huge performance win. !
- prefix executes shell commands.
You can use the internal :help
command to explain usage.
For more flexibility over how your REPL works you can use the repl
function directly instead of register_repl
. For example, in your app:
import click from click_repl import repl from prompt_toolkit.history import FileHistory @click.group() def cli(): pass @cli.command() def myrepl(): prompt_kwargs = { 'history': FileHistory('/etc/myrepl/myrepl-history'), } repl(click.get_current_context(), prompt_kwargs=prompt_kwargs) cli()
And then your custom myrepl
command will be available on your CLI, which will start a REPL which has its history stored in /etc/myrepl/myrepl-history
and persist between sessions.
Any arguments that can be passed to the python-prompt-toolkit
Prompt class can be passed in the prompt_kwargs
argument and will be used when instantiating your Prompt
.