CommandLineParser 库 - 如何将一个选项的输出用于下一个选项

Posted

技术标签:

【中文标题】CommandLineParser 库 - 如何将一个选项的输出用于下一个选项【英文标题】:CommandLineParser library - How to use output of one option into next one 【发布时间】:2019-03-12 01:47:15 【问题描述】:

我正在阅读 CommandLineParser 文档,我对这里的功能设计方式非常感兴趣:

CommandLine for verbs

我基本上有一个命令行应用程序,我需要在其中设置不同的参数。如下所示

MyApp.exe -a val1 -b val2 -c -d

我想要实现的是,如果 -c 存在于命令行应用程序中,我想获取 -a val1 -b val2 产生的结果,然后调用我的下一个函数结果和 -c 所做的操作。

在这种情况下:

int Main(string[] args) 
  return CommandLine.Parser.Default.ParseArguments<AddOptions, CommitOptions, CloneOptions>(args)
    .MapResult(
      (AddOptions opts) => RunAddAndReturnExitCode(opts),
      (CommitOptions opts) => RunCommitAndReturnExitCode(opts), 
      errs => 1);

如何获取 RunAddAndReturnExitCode(opts) 的结果并将其添加到 RunCommitAndReturnExitCode 中?

我真的很喜欢动词的设计方式,因为它使代码保持整洁。

【问题讨论】:

【参考方案1】:

如果您使用命名静态方法,则不需要匿名委托。

static int Main(string[] args)

    return Parser.Default.ParseArguments<SubmitProcessOptions, CancelProcessOptions, GetProcessOptions>(args).MapResult<SubmitProcessOptions, CancelProcessOptions, GetProcessOptions, int>(RunSubmitProcess, RunCancelProcess, RunGetProcess, HandleParseError);


static int RunSubmitProcess(SubmitProcessOptions submitProcessOptions)

    Console.WriteLine($"ProcessKey: submitProcessOptions.ProcessKey");
    foreach (var parameter in submitProcessOptions.Parameters)
    
        Console.WriteLine($"Parameter: parameter");
    
    return 0;


static int RunCancelProcess(CancelProcessOptions cancelProcessOptions)

    Console.WriteLine($"ProcessKey: cancelProcessOptions.ProcessKey");
    return 0;


static int RunGetProcess(GetProcessOptions getProcessOptions)

    Console.WriteLine($"ProcessKey: getProcessOptions.ProcessKey");
    return 0;


static int HandleParseError(IEnumerable<Error> errs)

    //handle errors
    return 1;
        

【讨论】:

以上是关于CommandLineParser 库 - 如何将一个选项的输出用于下一个选项的主要内容,如果未能解决你的问题,请参考以下文章

C#CommandLineParser

CommandLineParser - 如果没有给出开关,则显示 --help 结果

CommandLineParser 不接受内部带有减号的参数

[C++][原创]opencv中CommandLineParser使用

[C++][原创]opencv中CommandLineParser使用

csharp https://commandline.codeplex.com/上的CommandLineParser Nuget软件包的文档已过时。以下是更新的工作