Development Status
- 5 - Production/Stable
Environment
- Console
- MacOS X
- Other Environment
Intended Audience
- Developers
- Education
- End Users/Desktop
- Other Audience
- System Administrators
Operating System
- MacOS
- MacOS :: MacOS X
- POSIX
- POSIX :: BSD
- POSIX :: BSD :: FreeBSD
- POSIX :: Linux
- POSIX :: SunOS/Solaris
- Unix
Programming Language
- Other Scripting Engines
- Python
- Python :: 3
- Python :: 3.9
- Python :: 3.10
- Python :: 3.11
- Python :: 3.12
- Python :: 3.13
- Python :: 3 :: Only
- Python :: Implementation
- Python :: Implementation :: IronPython
- Python :: Implementation :: PyPy
- Unix Shell
Topic
- Desktop Environment
- Education :: Computer Aided Instruction (CAI)
- Education :: Testing
- Office/Business
- Other/Nonlisted Topic
- Software Development
- Software Development :: Build Tools
- Software Development :: Libraries
- Software Development :: Libraries :: Python Modules
- Software Development :: Pre-processors
- Software Development :: User Interfaces
- System
- System :: Installation/Setup
- System :: Shells
- System :: System Shells
- Terminals
- Utilities

shtab
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: shtab processes an argparse.ArgumentParser object to generate a tab completion script for your shell
Features
Outputs tab completion scripts for
bash
zsh
tcsh
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})
Installation
Choose one of:
pip install shtab, or
conda install -c conda-forge shtab
Usage
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}
Examples
FAQs
Not working? Check out frequently asked questions.
Alternatives
-
executes the underlying script every time <TAB> is pressed (slow and has side-effects)
-
executes the underlying script every time <TAB> is pressed (slow and has side-effects)
only provides zsh completion
-
different framework completely replacing the builtin argparse
solves multiple problems (rather than POSIX-style “do one thing well”)
Contributions
Please do open issues & pull requests! Some ideas:
support fish (#174)
support powershell
See CONTRIBUTING.md for more guidance.