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 库 - 如何将一个选项的输出用于下一个选项的主要内容,如果未能解决你的问题,请参考以下文章
CommandLineParser - 如果没有给出开关,则显示 --help 结果
CommandLineParser 不接受内部带有减号的参数
[C++][原创]opencv中CommandLineParser使用
[C++][原创]opencv中CommandLineParser使用
csharp https://commandline.codeplex.com/上的CommandLineParser Nuget软件包的文档已过时。以下是更新的工作