I normally use Click but sometimes argparse is great for CLI tools that have zero dependencies and aren't massive in scope.
Since most systems have Python, distributing your argparse driven file means curling it down and making it executable instead of having to pip install things.
Moreover, click provides a lot of additional CLI-related stuff (printing with colors, asking for input, progress bars) with IMHO pretty reasonable default behaviour. And it's really well-documented!
Re:Tools I use: argparse builder
by ex_amazon_sde on Thursday October 08, 2020 @10:51AM
(#24719594)
Click lacks flexibility, requires almost the same amount of boilerplate than argparse, and add dependencies.
Re:Tools I use: argparse builder
by metalliqaz on Thursday October 08, 2020 @09:26AM
(#24718892)
For things that don't require the complexity/features of argparse, I use sys.argv. Doesn't require any extra packages and other programmers have no trouble understanding the code.
Also it avoids a pallets package, which is good because I prefer to avoid any unnecessary exposure to its maintainer.
Re:Tools I use: argparse builder
by anonymoushn on Thursday October 08, 2020 @09:35AM
(#24718961)
What issues do the pallets maintainers have?
Re:Tools I use: argparse builder
by metalliqaz on Thursday October 08, 2020 @10:01AM
(#24719151)
This is HN not Reddit, so I will just say I personally don't like him and talk about sys.argv.
Nearly every script I write only requires something like the following:
for arg in sys.argv[1:]:
if arg == '-v':
...
if ...:
print(f"Usage: {sys.argv[0]} -v ...")
In the very rare occasion that I have an actually large command line project, argparse is built in and works fine.What I like about argparse is that it will handle stuff like --infile -v (-v means filename in this context since it's value of the infile parameter)
or -- -v (-v is forced to be interpreted as positional in this case since it comes after --).
Re:Tools I use: argparse builder
by metalliqaz on Thursday October 08, 2020 @11:51AM
(#24720286)
Yeah, I would use argparse if I had to support something like that.
To be honest, the extent of my command line parsing is almost always just this:
try:
infile = sys.argv[1]
outfile = sys.argv[2]
except IndexError:
print(f"Usage: {sys.argv[0]} <infile> <outfile>")
[1] https://click.palletsprojects.com/en/7.x/