打印CLI11 help_text的方法

Posted

技术标签:

【中文标题】打印CLI11 help_text的方法【英文标题】:Method for printing CLI11 help_text 【发布时间】:2021-09-20 06:33:12 【问题描述】:

我搜索了高低,找不到这个。打印帮助的CLI11 方法是什么。我希望能够在用户输入错误信息时向他们显示帮助。

另外,没有选项时,CLI11 是否会抛出异常?如果没有,你怎么知道给出了多少个选项?

【问题讨论】:

什么是cli11?? @Alan:显然它是一个参数解析库。我添加了一个链接,直接来自网络搜索。 CLI11 是一个命令行解析包。是的,我已经知道关于使用 CLI11 的页面,而不是 CLI11 方法用于以编程方式输出您正在构建的工具的帮助文本。您可以使用 -h、--help 命令行选项在您的工具上输出帮助文本。但是我要从我的工具中以编程方式输出该文本。 @rtcdude:我猜你知道我添加链接的页面是为了向可能不熟悉该问题的其他读者提供链接,例如提出问题的人。 【参考方案1】:

我会回答我自己的问题,以便将来对其他人有所帮助。

我在网上遇到了一个代码 sn-p,它暗示了一个解决方案并引导我找到答案。总之,没有CLI11的方法可以直接打印出帮助文本。但是,有两种方式可以通过编程方式打印帮助文本。

try/catch 块

这是 CLI11 原生方法。设置完所有选项定义后,定义一个 try/catch 块,如下所示:

CLIx::App app( argc,
               argv );
         .
         .
         .
try
    
    app.parse( argc,
               argv);
    
catch( const CLI::CallForHelp &e )
    
    exit( app.exit( e ) );
    

“exit(app.exit(e));”行调用应用程序解析器方法“exit”,该方法打印帮助文本并返回错误代码以退出程序。然后,当您想要打印帮助文本时,只需投掷:

throw CLI::CallForHelp();

此异常从未在任何文档中描述过,只有通过爬取 CLI11 的源代码才能发现。

有点直接,有点笨拙

前面的方法假设您想在打印帮助文本后退出程序。在我的情况下,这是行不通的,因为作为我程序的一部分,我让用户在交互式提示符下输入带有选项的命令。相反,您可以使用假异常直接调用 CLI11 的退出方法:

app.exit( CLI::CallForHelp() );

有点傻,但完成了工作。

同样,这在任何地方都没有记录,只有通过 CLI11 代码才能发现。

最后,尽管有这个小疣,我强烈推荐CLI11。它易于使用且功能强大。

【讨论】:

以上是关于打印CLI11 help_text的方法的主要内容,如果未能解决你的问题,请参考以下文章

在 angular-cli 中打印自定义原理图日志

在 CLI 上使用 bq 从 BigQuery 标准 SQL 连接表中打印出漂亮的值表?

Django:<ul>在字段的help_text中

从 Django UserCreateForm 中删除 help_text

为啥 Django makemigrations 每次运行时都会检测到由于 help_text/verbose_name 属性中的重音而导致的更改?

SQL C++/CLi - 知道某物是不是在表中的方法,如果是,则使用它的 id,如果不是,则生成新的 id 并获取它