4

在使用 picocli 构建的 CLI 应用程序中,实现交互式确认的最合适方法是什么?

场景是,当某个命令运行时,我需要得到用户的确认才能执行某个任务。我使用了interactive optionpicocli 文档中提到的,但它没有按预期工作。

@CommandLine.Option(names = {"-c", "--copy-contract"},
            description = "Do you want to copy the contract in to the project?", interactive = true, arity = "1")
boolean isCopy;

运行命令时,上述选项似乎不会触发用户输入。

任何想法?

4

1 回答 1

5

如果(且仅当)指定了该选项,该@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);
    }
}

(有一个功能要求在未来的版本中将其包含在 picocli 中。)

于 2020-05-22T01:40:27.770 回答