kotlin - 如何在 kotlin 中使用 args4j 解析参数?
问题描述
我需要从命令行解析信息,所以我选择 args4j 库。命令行格式:ls [-l] [-h] [-r] [-o output.file] directory_or_file。
我试图创建选项然后解析。当我只得到“-ls”时,输出是正确的,但是当我得到“-ls -l”(超过1个参数)时,程序不会停止,我可以在命令行上输入,直到我强行停止程序。我将不胜感激任何帮助!
public class Settings {
@Option(name = "-ls", usage = "Init command")
var command = false
@Option(name = "-l", usage = "Long flag")
var longFlag = false
@Option(name = "-h")
var humanReadable = false
@Option(name = "-r")
var reversed = false
}
fun main() {
val settings = Settings()
val parser = CmdLineParser(settings)
var args = mutableListOf<String>()
val input = readLine()
parser.parseArgument(input)
print("${settings.command} ${settings.longFlag}")
解决方案
这可能无法完全回答您的问题,但如果您的平台允许,您可以尝试将参数添加为环境变量。在微服务中定义它们通常更方便,Makefile
或者Dockerfile
如果您正在使用微服务。或者您可以将它们添加到 app 命令前面,以将它们作为环境变量推送到应用程序中。语法是:
FOO=bar appcommand
使用 kotlin,您可以使用以下示例读取环境变量:
System.getenv("FOO")
将返回“酒吧”。
推荐阅读
- javascript - Promised Web Workers 的速度
- html - 将元素固定在粘性元素下方
- mysql - 编写查询以在每一行中打印员工姓名和 UIN。如果不存在 UIN,则在其位置打印 NULL。输出顺序无关紧要
- vue.js - 根 Vue 实例未收到事件
- python-3.x - 如何让球慢下来,“反弹”,然后更慢?
- amazon-web-services - 用于 ACM 证书验证的动态 Route 53 记录
- c# - 如何在 C# 中使用 "some_number.to_bytes(1, byteorder='big').decode()" (Python) 获得相同的结果?
- java - 调用垃圾收集器后我的代码没有终止
- java - 多次成功连接后无法创建与数据库服务器的连接
- sql - NULL + 'something' 的串联是否总是产生 NULL?为什么?