A module to help parse command line arguments and parameters.
There are three type of input arguments:
Flag
arguments that are not assigned with values.(Or it can be seen as logical value)Option
arguments that are specified with both name and valueParameter
arguments that are distinguished by position
The arguments can be divided to several Group
The Flag
type can be created by
Flag(innername::AbstractString; outername::AbstractString = "",
abbr::AbstractString = "", help::AbstractString = "")
@flag_str "--flag"
flag"--flag"
when generating Flag
type using macro, the other properties like abbr
, help
can't be specified.
Option
type can be created by
Option(innername::AbstractString; outername::AbstractString = "",
abbr::AbstractString = "", default::AbstractString = "",
fmt::AbstractString = "%s", required::Bool = false,
help::AbstractString = "")
@opt_str "--optionFmt"
opt"--optionFmt"
When using macros to create Option
type, one can only specify the name and input format. To add more information,
using function format instead. The Fmt
represent the input format, see next chapter for detail.
The Parameter
can be created by
Parameter(position::Int; innername::AbstractString = "",
default::AbstractString = "", fmt::AbstractString = "%s",
required::Bool = false, help::AbstractString = "")
The Parameter
type is recognized by position, and the innername will be par1
, par2
, ...
if innername
is not specified.
A Group
contains several Flag
, Option
and Parameter
, which is created by
Group(name::AbstractString, flags::Vector{Flag}=Flag[],
opts::Vector{Option}=Option[], pars::Vector{Parameter}=Parameter[])
The input format is indicated by a C-like string.
The symbols below
"%s", "%f", "%g", "%h", "%o", "%b", "%c", "%d", "%l"
describ the data type, and other symbols will be explained to delimiter.
Their meanings are:
"%s"
string"%f"/"%g"
decimal float"%c"
complex float"%h"
hexadecimal integer"%o"
octal integer"%b"
binary integer"%d"
integer"%l"
logical (true, false, 0 or 1)
Set julia script like:
using ArgumentProcessor
group = Group(
"group1",
[
Flag("flag1")
],
[
Option("float", abbr="F", fmt=" %f", help="Input a float",
required=true), # pay attention to the space before %f
Option("datatime", abbr="D", fmt="%d/%d/%dT%d:%d:%f",
help="Input a datetime format"),
Option("string", abbr="S", fmt=" \"%s\"") # had better add " around the string
],
[
Parameter(1, fmt="%f", default="0.1", help="First float parameter")
]
)
input = ArgumentProcessor.parse(ARGS, group)
and run the script using
julia -- program.jl --flag1 --float 0.1 -D2022/01/01T10:01:10.5 --string '"filename"'
the input will be parsed to
(flag1 = true, float = 0.1, datatime = (2022, 1, 1, 10, 1, 10.5),
string = "filename", par1 = 0.1)
when run the script using
julia -- program.jl --help
it will print text like
$ julia program.jl --help
Usage: test.jl [--datatime(int)/(int)/(int)T(int):(int):(float)|-D(int)/(int)/(int)T(int):(int):(float)] [--flag1] --float (float)|-F (float) [--string "(string)"|-S "(string)"] [par1(float)]
Example:
test.jl --datatime1/1/1T1:1:1.0 --flag1 --float 1.0 --string ""1"" 0.1
Argument:
-D, --datatime Input a datetime format
--flag1
-F, --float Input a float
-S, --string
par1 First float parameter
Set julia script like:
using ArgumentProcessor
addflag!("flag1")
addopt!("float", abbr="F", fmt=" %f", help="Input a float", required=true)
addopt!("datetime", abbr="D", fmt="%d/%d/%dT%d:%d:%f", help="Input a datetime format")
addopt!("string", abbr="S", fmt=" \"%s\"")
addpar!(1; fmt="%f", default="0.1", help="First float parameter")
input = ArgumentProcessor.parse(ARGS)
and it will act as Example 1
The settings can be parsed to Dict
type to save,
and can be parsed from loaded Dict
type.
you can save with script below:
using ArgumentProcessor, TOML
addflag!("flag1")
addopt!("float", abbr="F", fmt=" %f", help="Input a float", required=true)
addopt!("datetime", abbr="D", fmt="%d/%d/%dT%d:%d:%f", help="Input a datetime format")
addopt!("string", abbr="S", fmt=" \"%s\"")
addpar!(1; fmt="%f", default="0.1", help="First float parameter")
open("arg_setting.toml", "w") do io
TOML.print(io, Dict(group))
end
the settings are saved like:
name = "group1"
[[flags]]
outername = "flag1"
help = ""
abbr = ""
innername = "flag1"
[[opts]]
outername = "float"
format = " %f"
default = ""
required = true
help = "Input a float"
abbr = "F"
innername = "float"
[[opts]]
outername = "datatime"
format = "%d/%d/%dT%d:%d:%f"
default = ""
required = false
help = "Input a datetime format"
abbr = "D"
innername = "datatime"
[[opts]]
outername = "string"
format = " \"%s\""
default = ""
required = false
help = ""
abbr = "S"
innername = "string"
[[pars]]
format = "%f"
default = "0.1"
required = false
help = "First float parameter"
position = 1
innername = "par1"
and the settings can be loaded like:
using ArgumentProcessor, TOML
group = TOML.parsefile("arg_setting.toml") |> Group
1.0.0
submit first version1.1.0
add function to check parameter setting