- What: Automatically generate shell tab completion scripts for Python CLI apps
 - Why: Speed & correctness. Alternatives like argcomplete and pyzshcomplete are slow and have side-effects
 - How: 
shtabprocesses anargparse.ArgumentParserobject to generate a tab completion script for your shell 
- Outputs tab completion scripts for
bashzshtcsh
 - Supports
 - Supports arguments, options and subparsers
 - Supports choices (e.g. 
--say={hello,goodbye}) - Supports file and directory path completion
 - Supports custom path completion (e.g. 
--file={*.txt}) 
Table of Contents
Choose one of:
pip install shtab, orconda install -c conda-forge shtab
See operating system-specific instructions in the docs.
There are two ways of using shtab:
- CLI Usage: 
shtab's own CLI interface for external applications- may not require any code modifications whatsoever
 - end-users execute 
shtab your_cli_app.your_parser_object 
 - Library Usage: as a library integrated into your CLI application
- adds a couple of lines to your application
 - argument mode: end-users execute 
your_cli_app --print-completion {bash,zsh,tcsh} - subparser mode: end-users execute 
your_cli_app completion {bash,zsh,tcsh} 
 
See the docs for usage examples.
Not working? Check out frequently asked questions.
- argcomplete
- executes the underlying script every time 
<TAB>is pressed (slow and has side-effects) 
 - executes the underlying script every time 
 - pyzshcomplete
- executes the underlying script every time 
<TAB>is pressed (slow and has side-effects) - only provides 
zshcompletion 
 - executes the underlying script every time 
 - click
- different framework completely replacing the builtin 
argparse - solves multiple problems (rather than POSIX-style "do one thing well")
 
 - different framework completely replacing the builtin 
 
Please do open issues & pull requests! Some ideas:
- support 
fish(#174) - support 
powershell 
See CONTRIBUTING.md for more guidance.
