argparse
Command line argument parsing library. It generates the parser at compile time so that parsed options have a well-defined type.
Example
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.
run()
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)
parse()
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)
Alternatives
If argparse
doesn't suit your needs, consider these alternatives: