Build a simple command-line interface from your functions.
- ✓ Least syntax required: you do not need to "learn a library" to use this
- ✓ keeps it DRY (Don't Repeat yourself):
- it uses all information available like annotations, default values and docstrings... yet does not require them.
- ✓ Just decorate a function with
@cli- that is it - it can now be called as CLI but also remains usable by other functions (unlike the click library)
- ✓ Works with booleans (flags) and lists (multiple args) automatically
- ✓ Standing on the shoulders of giants (i.e. it uses argparse and learnings from others)
- ✓ Prints returned python objects in JSON (unless passing
- ✓ Colorized output automatically
- ✓ Allows creating executable by using
cliche install <mycli>
- ✓ Creates shortcuts, e.g. a variable "long_option" will be usable like
- ✓ No external dependencies -> lightweight
You want to make a calculator. You not only want its functions to be reusable, you also want it to be callable from command line.
# calculator.py from cliche import cli @cli def add(a: int, b: int): print(a + b)
Now let's see how to use it from the command-line:
pascal@archbook:~/calc$ cliche install calc pascal@archbook:~/calc$ calc add --help usage: calc add [-h] a b positional arguments: a |int| b |int| optional arguments: -h, --help show this help message and exit
pascal@archbook:~/calc$ calc add 1 10 11
Installation of commands
You noticed we ran
cliche install calc
We can undo this with
cliche uninstall calc
Note that installing means that all
@cli functions will be detected
in the folder, not just of a single file, even after installation. You
only have to install once, and on Linux it also adds autocompletion to
your CLI if
argcomplete has been installed.
from cliche import cli @cli def add_or_mul(a_number: int, b_number=10, sums=False): """ Adds or multiplies a and b :param a_number: the first one :param b_number: second one :param sums: Sums when true, otherwise multiply """ if sums: print(a_number + b_number) else: print(a_number * b_number)
pascal@archbook:~/calc$ calc add_or_mul 1 10 pascal@archbook:~/calc$ calc add_or_mul --sum 1 11 pascal@archbook:~/calc$ calc add_or_mul 2 -b 3 6
Check the example files here
Comparison with other CLI generators
- argparse: it is powerful, but you need a lot of code to construct an argparse CLI
- click: you need a lot of decorators to construct a CLI, and not obvious how to use it. It does not keep things DRY. Also, the annotated function is not usable.
- hug (cli): connected to a whole web framework, but gets a lot right
- python-fire: low set up, but annoying traces all the time / ugly design, does not show default values nor types
- cleo: requires too much code/objects to construct