java - 在运行时启用或禁用选项
问题描述
我正在尝试使用 Picocli 制作交互式 cli,并希望在完成 a(n) 操作/要求后显示一些选项。有没有办法在不使用 CommandSpec 的情况下做到这一点?
之前显示的选项
@Option(names = {"-c","--chooseDevice"}, description = {"Choose Devices"})
private boolean chooseDevice;
--
some code that will initialize a device
--
之后显示的选项
@Options(names = {,"-d", "--deviceCommand", description = "some device command")
private boolean deviceCommand;
输出应该是
//before choosing device
-c --chooseDevice "Choose Devices"
//after choosing device
-c --chooseDevice "Choose Devices"
-d --deviceCommand "some device command"
解决方案
可以在运行时更改hidden
选项的属性,但它确实需要使用编程 API(如CommandSpec
类)。
Picocli 4.0 添加了从 中删除选项的功能CommandSpec
,因此您可以将其替换为具有不同hidden
属性值的选项副本。
像这样的东西:
CommandLine cmd = new CommandLine(new MyApp());
// replace the old "--device" option with a different one that is not hidden
CommandSpec spec = cmd.getCommandSpec();
OptionSpec old = spec.findOption("--device");
OptionSpec newDeviceOption = OptionSpec.builder(old).hidden(false).build();
spec.remove(old);
spec.add(newDeviceOption);
cmd.execute(args);
有关详细信息,请参阅GitHub 问题 #736 。
推荐阅读
- azure-pipelines - Microsoft 流队列 Devops 管道 - 必须提供参数
- r - 如何使用 R“StreamMetabolism”包中的“read.production”函数来获取格式为 mm/dd/yy hh:mm:ss 的日期(例如,01/15/19 00:06:00)
- c# - 有没有办法通过 C# 中两列的组合对列表进行排序?
- c++ - 为什么我们不能重载 C++ 中基本数据类型的运算符?
- python-3.x - 正则表达式捕获第一个分隔符,但不包括
- python - 根据文件中的数据计算平均高度
- angular - 如何在角材料表中获得选定区域?
- python - 如何通过请求库将 Curl 命令更改为 Python3?
- c++ - 即使您没有将结构显式定义为指针,为什么还要使用 -> 来访问结构成员变量?
- javascript - 如何在 Rails 5 上的 ruby 中添加人脸识别?