在使用picocli构建的CLI应用程序中,实现交互式确认的最合适方法是什么?
方案是,当运行特定命令时,我需要从用户那里得到确认以执行特定任务。我使用了picocli文档中提到的interactive option
,但无法正常工作。
@CommandLine.Option(names = {"-c", "--copy-contract"},
description = "Do you want to copy the contract in to the project?", interactive = true, arity = "1")
boolean isCopy;
运行命令时,上述选项似乎不会触发用户输入。
有什么主意吗?
答案 0 :(得分:1)
@Option(names = "-c", interactive = true)
属性将导致picocli在(且仅)指定-c
选项时提示用户。
如果未指定-c
选项时,应用程序还需要提示用户,则当前需要在应用程序代码中完成。
从picocli 4.3.2开始,可以按以下步骤完成:
class MyApp implements Runnable {
@Option(names = {"-c", "--copy-contract"},
description = "Do you want to copy the contract in to the project?",
interactive = true, arity = "1")
Boolean isCopy;
public void run() {
if (isCopy == null) {
String s = System.console().readLine("Copy the contract? y/n: ");
isCopy = Boolean.valueOf(s) || "y".equalsIgnoreCase(s);
}
System.out.printf("isCopy=%s%n", isCopy);
}
public static void main(String... args) {
new CommandLine(new MyApp()).execute(args);
}
}
(有一个feature request会在将来的版本中将其包含在picocli中。)