当前位置: 首页 > 知识库问答 >
问题:

排除HelpFormatter中的几个选项。使用apache commons cli打印帮助()

令狐跃
2023-03-14

我正在使用apache commons cli解析java程序中的命令行参数

现在,我正试图找到一种方法,从使用帮助中排除显示一些敏感或调试选项。顺便说一句,我正在使用HelpFormaster来获得帮助。

Option first = Option.builder("f").hasArg().desc("First argument").build();
Option second = Option.builder("s").hasArg().desc("Second argument").build();
Option debug = Option.builder("d").hasArg().desc("Debug argument. Shouldn't be displayed in help").build();

commandOptions.addOption(first).addOption(second).addOption(debug);

HelpFormatter help = new HelpFormatter();
help.printHelp("Test App", commandOptions);

这是打印所有选项。但是我不想打印第三个选项。

实际产量:

usage: Test App
 -d <arg>   Debug argument. Shouldn't be displayed in help // This shouldn't be displayed.
 -f <arg>   First argument
 -s <arg>   Second argument

预期产出:

usage: Test App
 -f <arg>   First argument
 -s <arg>   Second argument

这样,调试参数将只为实际需要了解它以进行调试的人所知。

是否有方法仅从帮助输出中禁用特定选项。但还是像其他选项一样解析它?

我顺便用的是commons-cli-1.3.1.jar

共有1个答案

东郭凯捷
2023-03-14

据我所知,HelpFormatter不打算为类似的内容子类化,尤其是appendOption()是私有的,因此不允许过滤掉选项。

因此,我将简单地构建两个Options对象,一个用于实际解析命令行选项,另一个用于打印帮助,即:

Option first = Option.builder("f").hasArg().desc("First argument").build();
Option second = Option.builder("s").hasArg().desc("Second argument").build();
Option debug = Option.builder("d").hasArg().desc("Debug argument. Shouldn't be displayed in help").build();

commandOptions.addOption(first).addOption(second).addOption(debug);

helpOptions.addOption(first).addOption(second);
HelpFormatter help = new HelpFormatter();
help.printHelp("Test App", helpOptions);
 类似资料:
  • 使用Selenium和python,我可以使用Chrome WebDriver实现以下操作: 但我找不到一个类似的属性为Firefox的webdriver选项。有一个吗?

  • 我有一个打印PDF的java程序。它使用Apache PDFBox创建一个对象(在某些情况下来自pdf文档或流),然后使用API将其发送到打印机: 现在我需要能够告诉打印机装订东西。。。 我熟悉javax.print.attributesAPI,并成功地使用它来指定托盘或设置双工,例如: 我知道装订有一个属性: 我有一个施乐Versalink B7035,带有Finisher XL附件,完全支持装

  • 这个问题是在电子艺术采访中提出的。 有三条线。第一个线程打印1到10个数字。第二个线程打印从11到20的数字。第三条线从21到30。现在这三个线程都在运行。然而,数字是按不规则的顺序打印的,如1、11、2、21、12等。 如果我想让数字按排序顺序打印,比如1,2。。。我该怎么处理这些线呢?

  • 问题内容: 我正在使用Entity Framework Code First开发WCF RESTful Web服务。 我的桌子上有很多列。我这样做是为了获得特定用户: 在此表上,有一个密码列,我不想返回此列。 如何从该选择中排除密码列? 问题答案: 在select语句中指定所需的每一列:

  • 问题内容: 例如,我有两个变量,以及如何仅使用一个变量而不将类型转换为来在单独的行中打印两个整数。(如在C ++以下:) 问题答案: 在python3中: 在python2中: …或者使用python3的打印 自从我的第一个答案以来,OP就使用可变类型更改来编辑问题。更新已更新问题的答案: 如果您有一些整数,即和: Python 3: Python 2: 要么 要么

  • 问题内容: 我是AngularJS的新手。我进行了很多搜索,但是并不能解决我的问题。 我第一次在选择框中得到一个空白选项。 这是我的HTML代码 JS 但这似乎不起作用。我该如何解决?这是JSFiddle演示 问题答案: 当传递给的一组选项中不存在被引用的值时,将生成空值。这样做是为了防止意外选择模型:AngularJS可以看到初始模型是未定义的还是未在选项集中,并且不想自行决定模型的值。 简而言