#flags #command-line #args #default-value

nightly pflag

实现 POSIX/GNU 风格 --flags 的 crate

11 个版本 (5 个破坏性更改)

0.6.2 2020 年 10 月 22 日
0.6.1 2020 年 9 月 14 日
0.5.2 2020 年 9 月 13 日
0.4.1 2020 年 9 月 11 日
0.1.0 2020 年 9 月 7 日

#494命令行界面

MIT 许可证

50KB
1K SLoC

Documentation

pflag

pflag 是 spf13 的 Go 包同名流行的分支的移植。

用法

use pflag::{FlagSet, Slice};
use std::net::{IpAddr, Ipv4Addr};

let mut flags = FlagSet::new("name");

// Use higher level methods over add_flag directly.
flags.int8("num", 0, "a flag for a number");
flags.string_p("str", 's', String::from("default value"), "a flag for a String and has a shorthand");
flags.ip_addr_slice(
    "addrs",
    Slice::from([IpAddr::V4(Ipv4Addr::new(0,0,0,0)), IpAddr::V4(Ipv4Addr::new(127,0,0,1))]),
    "a multi-valued flag",
);

let args = "--num=1 -s world --addrs 192.168.1.1,192.168.0.1 --addrs=127.0.0.1 subcommand";
if let Err(err) = flags.parse(args.split(' ')) {
    panic!(err);
}

// Retrieving value is very easy with the value_of method.
assert_eq!(*flags.value_of::<i8>("num").unwrap(), 1);
assert_eq!(*flags.value_of::<String>("str").unwrap(), "world");
assert_eq!(flags.value_of::<Slice<IpAddr>>("addrs").unwrap().len(), 3);

// Any non-flag args i.e. positional args can be retrieved by...
let args = flags.args();
assert_eq!(args.len(), 1);
assert_eq!(args[0], "subcommand");

依赖关系

~255–700KB
~17K SLoC