在picocli中实现交互式确认

问题描述 投票:2回答:1

在使用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;

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

有什么想法吗?

java command-line-interface picocli
1个回答
0
投票

@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中。)

© www.soinside.com 2019 - 2024. All rights reserved.