当前位置: 首页 > 面试题库 >

Apache Commons CLI选项解析器可以忽略未知的命令行选项吗?

沈凡
2023-03-14
问题内容

我正在编写一个使用命令行参数的Java应用程序,该参数是使用Apache Commons
CLI和GnuParser处理的。由于没有什么有趣的原因,我希望它默默地忽略未知的命令行选项,而不是抛出ParseException,但是我看不到这样做的方法。我看到GnuParser.parse()上有一个stopAtNonOption布尔选项,但我想要的更像是ignoreAtNonOption,它在遇到未知令牌后将继续处理选项。

我可以实现自己的解析器来完成此操作,但令我惊讶的是没有内置此功能,因此我认为我应该在走这条路之前进行检查。

我正在谈论的示例代码:

try {
  CommandLine commandLine = parser.parse(options, args);
  // stopAtNonOption set to true (below) is also not what I want
  // CommandLine commandLine = parser.parse(options, args, true);
} catch (ParseException e) {
  LOG.error("error parsing arguments", e);
  throw new RuntimeException(e);
}

问题答案:

这对我有用(也可以派生其他解析器):

public class ExtendedGnuParser extends GnuParser {

    private boolean ignoreUnrecognizedOption;

    public ExtendedGnuParser(final boolean ignoreUnrecognizedOption) {
        this.ignoreUnrecognizedOption = ignoreUnrecognizedOption;
    }

    @Override
    protected void processOption(final String arg, final ListIterator iter) throws     ParseException {
        boolean hasOption = getOptions().hasOption(arg);

        if (hasOption || !ignoreUnrecognizedOption) {
            super.processOption(arg, iter);
        }
    }

}


 类似资料:
  • 问题 你的程序如何能够解析命令行选项(位于sys.argv中) 解决方案 argparse 模块可被用来解析命令行选项。下面一个简单例子演示了最基本的用法: # search.py ''' Hypothetical command-line tool for searching a collection of files for one or more text patterns. ''' imp

  • 函数参数 Short Form Options # getopt_short.py import getopt opts, args = getopt.getopt(['-a', '-bval', '-c', 'val'], 'ab:c:') for opt in opts: print(opt) Long Form Options # getopt_long.py import g

  • 问题内容: 任何人都知道可以处理从命令行传递来的论证的库(IE:公共静态main中的args [])。 问题答案: Apache Commons-cli。

  • Node.js 自带了各种命令行选项。 这些选项开放了内置的调试、执行脚本的多种方式、以及其他有用的运行时选项。运行 man node 可在一个终端中查看操作手册。 概要 node [options] [v8 options] [script.js | -e "script" | -] [--] [arguments] node debug [script.js | -e "script" | <

  • Shebang 行 几乎每个 Perl 程序都如此开始: #!/usr/bin/perl 这是 UNIX 结构,它告诉 Shell 直接执行余下的输入程序文件。 你可以在此行添加 Perl 的任何命令行选项,它们将成为选项之后命令行的一部分。 如果你有一个程序包含: #!/usr/bin/perl -T 然后执行: perl -l program.pl -l 和 -T 两个选项都会使用,但

  • 建立一个解析器 import argparse parser = argparse.ArgumentParser( description='This is a PyMOTW sample program', ) 简单示例 # argparse_short.py import argparse parser = argparse.ArgumentParser(description='