Command line argument parsing library. It generates the parser at compile time so that parsed options have a well-defined type.
After defining your expected arguments with newParser(...)
, use:
run(...)
to parse and execute anyrun:
blocks you've defined. This will automatically display help text when-h
/--help
is used.parse(...)
to parse without executing, giving you more control over what happens.
Both procs will parse the process' command line if no arguments are given.
import argparse
var p = newParser:
flag("-a", "--apple")
flag("-b", help="Show a banana")
option("-o", "--output", help="Output to this file")
command("somecommand"):
arg("name")
arg("others", nargs = -1)
run:
echo opts.name
echo opts.others
echo opts.parentOpts.apple
echo opts.parentOpts.b
echo opts.parentOpts.output
echo opts.parentOpts.output_opt.get()
try:
p.run(@["--apple", "-o=foo", "somecommand", "myname", "thing1", "thing2"])
except UsageError as e:
stderr.writeLine getCurrentExceptionMsg()
quit(1)
import argparse
var p = newParser:
flag("-a", "--apple")
flag("-b", help="Show a banana")
option("-o", "--output", help="Output to this file")
arg("name")
arg("others", nargs = -1)
try:
var opts = p.parse(@["--apple", "-o=foo", "hi"])
assert opts.apple == true
assert opts.b == false
assert opts.output == "foo"
assert opts.name == "hi"
assert opts.others == @[]
except ShortCircuit as err:
if err.flag == "argparse_help":
echo err.help
quit(1)
except UsageError:
stderr.writeLine getCurrentExceptionMsg()
quit(1)
If argparse
doesn't suit your needs, consider these alternatives: