A simple command line argument parser.
Usage:
-
Define parameters with param, requiredParam, repeatedParam and command. Each of these methods gives back a handle to a future argument value.
-
Call
parse()
with actual arguments. -
If parsing succeeds, the arguments will be available in the handles defined in step 1.
If parsing fails, error descriptions are printed and the program exits with 2.
Example:
val parser = argparse.ArgumentParser("0.1.0")
val p1 = parser.param[String]("--this-is-a-named-param", default = "default value")
val p2 = parser.param[Int]("positional-param", default = 2)
parser.parse(Seq("--this-is-a-named-param=other", 5))
println(p1.value)
println(p2.value)
- Value Params
- description
A short description of this command. Used in help messages.
- enableBashCompletionFlag
Include a
--bash-completion
flag which generate a bash completion script.- enableHelpFlag
Include a
--help
flag which will print a generated help message.- env
The environment.
- stdout
The standard error stream.
- Companion
- object
Value members
Concrete methods
Low-level escape hatch for manually adding subcommand information.
Low-level escape hatch for manually adding subcommand information.
See also command for the high-level API.
Low-level escape hatch for manually adding parameter definitions.
Low-level escape hatch for manually adding parameter definitions.
See also param, requiredParam and repeatedParam for the high-level API.
Low-level escape hatch for manually adding parameter information.
Low-level escape hatch for manually adding parameter information.
See also param, requiredParam and repeatedParam for the high-level API.
Utility to define a subcommand.
Utility to define a subcommand.
Many modern command line apps actually consist of multiple nested commands, each corresponding to the verb of an action, such as 'run' or 'clone'. Typically, each sub command also has its own dedicated parameter list.
In argparse, subcommands can easily be modelled by a positional parameter that represents the command, followed by a repeated, all-absorbing parameter which represents the command's arguments. However, since this pattern is fairly common, this method is provided as a shortcut.
- Value Params
- action
A function called with the remaining arguments after this command. Note that you may reference an argument's value in the action.
- name
The name of the command.
A default help message, generated from parameter help strings.
A default help message, generated from parameter help strings.
Define an optional parameter, using the given default value if it is not supplied on the command line or by an environment variable.
Define an optional parameter, using the given default value if it is not supplied on the command line or by an environment variable.
ErgoTip: always give named parameters a default value.
Internal design note: param and requiredParam differ only in the presence of the 'default' parameter. Ideally, they would be merged into one single method, giving the 'default' parameter a default null value (as is done for the other optional parameters, such as 'env' and 'help'). Unfortunately, since 'default' is call-by-name, there is no way to check if it has been set to null without evaluating it. See singleParam for the common denominator.
- Type Params
- A
The type to which an argument shall be converted.
- Value Params
- aliases
Other names that may be used for this parameter. This is a good place to define single-character aliases for frequently used named parameters. Note that this has no effect for positional parameters.
- argName
The name to use in help messages for this parameter's argument. This only has an effect on named parameters which take an argument. By default, the name of the type of the argument will be used.
- default
The default value to use in case no matching argument is provided.
- endOfNamed
Indicates that any arguments encountered after this parameter must be treated as positionals, even if they start with
-
. In other words, a parameter marked with this has the same effect as the--
separator. It can be useful for implementing sub-commands. (Note however that this ArgumentParser has a dedicatedcommand
method for such use cases)- env
The name of an environment variable from which to read the argument in case it is not supplied on the command line. Set to 'null' to ignore.
- flag
Set to true if the parameter should be treated as a flag. Flags are named parameters that are treated specially by the parser:
- they never take arguments, unless the argument is embedded in the flag itself
- they are always assigned the string value "true" if found on the command line. Note that flags are intended to make it easy to pass boolean parameters; it is quite rare that they are useful for non-boolean params. The flag field has no effect on positional parameters.
- help
A help message to display when the user types
--help
.- interactiveCompleter
Compute available shell completions starting with a given string. This is used by interactive bash completion, where the user program is responsible for generating completions.
- name
The name of the parameter. A name starting with
-
indicates a named parameter, whereas any other name indicates a positional parameter. Prefer double-dash named params. I.e. prefer "--foo" over "-foo".- standaloneBashComplete
A completer for bash. This is used by standalone bash completion, where a bash script generates completion, without the involvement of the the user program. If your program is implemented with Scala on the JVM, the startup time is considerable and hence standalone completion should be preferred for a snappy user experience.
- Returns
A handle to the parameter's future value, available once
parse(args)
has been called.
Parse the given arguments with respect to the parameters defined by param, requiredParam, repeatedParam and command.
Parse the given arguments with respect to the parameters defined by param, requiredParam, repeatedParam and command.
In case no errors are encountered, the arguments will be populated in the functions returned by the parameter definitions.
In case errors are encountered, the default behaviour is to exit the program.
The types of errors are:
-
An unknown argument is encountered. This can either be an unspecified named argument or an extranous positional argument.
-
A required argument is missing.
-
An argument cannot be parsed from its string value to its desired type.
- See also
parseResult for a version of this function which does not exit
Parse the given arguments with respect to the parameters defined by param, requiredParam, repeatedParam and command.
Parse the given arguments with respect to the parameters defined by param, requiredParam, repeatedParam and command.
Define a parameter that may be repeated.
Define a parameter that may be repeated.
Note that all named parameters may always be repeated, regardless if
they are defined as repeated or not. The difference is that for
non-repeat-defined parameters the last value is used, whereas
repeat-defined parameters accumulate values. This is why
repeatedParam takes an A
but gives back a Seq[A]
, while other
params take A
and give back A
.
E.g. consider the command line --foo=1 --foo=2 --foo=3
In case foo is a regular named parameter, then, after parsing, the value
will be 3
. In case it is defined as a repeating parameter, its value
will be Seq(1,2,3)
.
Repeated positional parameters consume all remaining positional command line arguments.
Define a required parameter.
Define a required parameter.
This method is similar to param, except that it does not accept a default value. Instead, missing arguments for this parameter will cause the parser to fail.
ErgoTip: avoid named parameters that are required. Only require positional parameters.
- See also
param
Inherited methods
Add commands declared via main annotations within a container.
Add commands declared via main annotations within a container.
- Inherited from
- ParserExtra