git.net

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: CLI parsing—with `--help` text—`--foo bar`, how to give additional parameters to `bar`?


--optimizer Adam,learning_rate=0.01,something_else=3

That syntax isn?t so bad! =]

How would you suggest the help text for this looks? (don?t worry about
implementation, just what goes to stdout/stderr)

PS: Yeah I used square brackets for my Bash arrays

On Fri, 16 Oct 2020 at 10:26 am, Cameron Simpson <cs at cskk.id.au> wrote:

> One other thing:
>
> On 15Oct2020 20:53, Samuel Marks <samuelmarks at gmail.com> wrote:
> >Idea: preprocess `sys.argv` so that this syntax would work
> >`--optimizer Adam[learning_rate=0.01]`*
> >
> >*square rather than round so as not to require escape characters or
> >quoting in `sh`
>
> Square brackets are also shell syntax, introducing glob character
> ranges. You're only not noticing probably because an unmatched glob is
> normally let through unchanged.
>
> For example:
>
>    somecmd x[b]
>
> would go through as "x[b]" _unless_ you had a matching local filename
> (in this case a file named "xb") in which case the shell would match the
> glob and pass through the match (in this case "xb").
>
> You'll find this issue a fair bit: if you want some punctuation, someone
> else has probably already wanted that punctuation for something. You'll
> still need to quote things for a lot of stuff.
>
> Commas are not special. You could try:
>
>     --optimizer Adam,learning_rate=0.01,something_else=3
>
> which would work for a fair amount of stuff.
>
> >Unfortunately this approach wouldn't give nice `--help` text.
> >What's the right solution here?
>
> To get nice help text you need your command line parser to be able to
> compose that help text in some way. Usually the help text in argparse is
> supplied when you define the option.
>
> Cheers,
> Cameron Simpson <cs at cskk.id.au>
>
-- 
Samuel Marks
Charity <https://sydneyscientific.org> | consultancy
<https://offscale.io> | open-source
<https://github.com/offscale> | LinkedIn <
https://linkedin.com/in/samuelmarks>