gpt4 book ai didi

Java:Apache commons-cli如何处理相互依赖的选项

转载 作者:行者123 更新时间:2023-12-02 04:37:11 24 4
gpt4 key购买 nike

我在 Apache commons-cli v1.3 上遇到了一些困难,而且我还没有找到解决以下问题的实用解决方案:

我有一个命令行工具,它 - 根据指定的参数 - 创建一个字符串(或从本地文件读取它),可能内联编辑它,并可选择显示,将所述字符串写入本地文件或通过对服务器的 HTTP 请求。

所以我有选项“c”代表“创建”,“r”代表“读取”,“e”代表“编辑”(通过cli),“d”代表显示,“w”代表“写入” ,“p”表示“推送到服务器”

显然,某些组合是可能的。例如。应该可以创建此字符串并将其推送,而无需从文件读取或写入文件。另外,应该可以在不推送的情况下创建和编写,等等......

所以参数的语义是:

("c" OR ("r" ["e"])) ["d" "w" "p"]

显然,当字符串被“c”创建时,它一定不能被“r”ead。当“c”执行时,我会使用来自 cli 解析器的交互式输入。当“读”时,我想允许用户通过 cli 的交互式输入进行“e”编辑。其余参数是可选的。

下一步:当“r”读取时,需要指定文件名/路径。另外,当“w”写作时,这是必要的。无论如何,应该可以指定要读取的文件和要写入的第二个文件。因此文件名有两个参数,它们都是可选的。

生成的语法如下所示:

tool -cp
tool -rp "filenametoread"
tool -rdwp "filenametoread" "filenametowrite"
tool -cw "filenametowrite"

等等。

我在这里有点迷失了。如何将 commons-cli 配置为具有两个文件名参数,这两个参数是根据指定的参数(选项)所需的?这可能吗?

最佳答案

不幸的是,Commons CLI 无法指定这样的相互依赖的选项。要处理这个问题,您需要执行自己的 if 检查。比如像这样

CommandLineParser parser = new PosixParser();
Options options = new Options();
options.addOption(new Option("h", "help", false, "display this message"));
options.addOption(new Option("c", "create", true, "Create a file"));
options.addOption(new Option("r", "read", truee, "Read a file"));
options.addOption(new Option("e", "edit", false, "Edit a file"));
options.addOption(new Option("d", "display", false, "Display a file"));
options.addOption(new Option("w", "write", false, "Write a file"));
options.addOption(new Option("p", "push", false, "Push a file"));

try {
CommandLine commandLine = parser.parse(options, args);
if (commandLine.hasOption("h")) {
showHelp(options);
System.exit(0);
}
// validate the commandline
// obviously, these can be split up to give more helpful error messages
if ((!(commandLine.hasOption("c") ^ (commandLine.hasOption("r") || commandLine.hasOption("e"))))
|| !(commandLine.hasOption("d") ^ commandLine.hasOption("w") ^ commandLine.hasOption("p"))) {
throw new ParseException("Invalid combination");
}
if ((!commandLine.hasOption("c") && !commandLine.hasOption("r")) {
throw new ParseException("Missing required arg");
}

// rest of the logic
} catch (ParseException pe) {
throw new ParseException("Bad arguments\n" + pe.getMessage());
}

关于Java:Apache commons-cli如何处理相互依赖的选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30616879/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com