代码之家  ›  专栏  ›  技术社区  ›  Fede E.

C commandlineparser——帮助打印然后停止

  •  5
  • Fede E.  · 技术社区  · 6 年前

    我正在构建一个使用 CommandLineParser 从命令获取一些参数。

    默认情况下,库已经带有--help(或help动词)来显示关于接受的每个参数的帮助信息。

    现在,当我运行--help命令时,我确实得到了帮助屏幕,但是程序继续运行,但是由于其他默认参数没有设置,它中断了。

    代码如下:

    class Options
    {
        [Option('f', "force", Required = false, Default = false,
            HelpText = "Force ....")]
        public bool Force { get; set; }
    
        [Option('v', "version", Required = false, Default = "",
            HelpText =
                "....")]
        public string Version { get; set; }
    
        [Option('s', "silent", Required = false, Default = false, HelpText = "Disables output ...")]
        public bool Output { get; set; }
    
        [Option('p', "path", Required = false, Default = "../some/dir/",
            HelpText =
                "Specifies the path ...")]
        public string StartPath { get; set; }
    }
    

    然后在程序中:

    static int Main(string[] args)
    {
    
        try
        {
    
            var opts = new Options();
    
            Parser.Default.ParseArguments<Options>(args).WithParsed(parsed => opts = parsed);
    
            string version = opts.Version;
    
            PATCH_LOCATION = opts.StartPath;
    
            ....
    

    所以我得到了帮助屏幕,然后程序继续运行(未设置opts.starpath时中断,其他默认值也不中断)。

    当收到“帮助”命令时,知道如何“退出”程序吗?

    注意:如果使用了未知参数,commandlineparser也会抛出一个帮助屏幕,这也应该退出程序。

    1 回复  |  直到 6 年前
        1
  •  11
  •   Jon Skeet    6 年前

    你应该检查一下 ParseResult 返回的 WithParsed :

    var result = Parser.Default
        .ParseArguments<Options>(args)
        .WithParsed(parsed => opts = parsed);
    if (result.Tag == ParserResultType.NotParsed)
    {
        // Help text requested, or parsing failed. Exit.
        return 1;
    }
    

    (i 相信 请求帮助等同于解析失败。绝对值得检查。)

    推荐文章