如何禁用 Scopt 的 "Unknown options" 异常?
How can I disable Scopt's "Unknown options" exception?
我有一个基本的配置案例 class,它被用作几个不同脚本的配置的公共部分。我希望能够停止为解析此基本配置的 OptionParsers 复制粘贴代码(例如,每个脚本都需要 --cluster
和 --port
所以我希望单个基本 OptionParser 始终保持谨慎的),并让最小的自定义 OptionParser 处理每个脚本特有的选项(例如 --asdf
)。
问题是,如果我要求基本解析器解析包含 --asdf
的参数,Scopt 会抱怨:
[error] Error: Unknown option --asdf
[error] Usage: Config [options]
[error]
[error] -c <value> | --cluster <value>
[error] Cluster the machine is part of
[error] -p <value> | --port <value>
[error] Port to listen on
...
[error] Exception in thread "main" java.util.NoSuchElementException: None.get
有没有办法让它忽略未知参数?
定义自定义OptionParser
的时候,简单的放一个extra
override def errorOnUnknownArgument = false
进入定义。例如,
def optionParser = new OptionParser[CustomConfig]("Config") {
override def errorOnUnknownArgument = false
opt[String]('a', "asdf") optional () action { (x, c) =>
c.copy(asdf = x)
} text "Do something custom"
...
}
以防万一您正在使用 OParser
// define a setup
val setup: OParserSetup = new DefaultOParserSetup {
override def errorOnUnknownArgument: Boolean = false
}
// then pass setup to parse function
OParser.parse(parser, args, YourConfig(), setup)
我有一个基本的配置案例 class,它被用作几个不同脚本的配置的公共部分。我希望能够停止为解析此基本配置的 OptionParsers 复制粘贴代码(例如,每个脚本都需要 --cluster
和 --port
所以我希望单个基本 OptionParser 始终保持谨慎的),并让最小的自定义 OptionParser 处理每个脚本特有的选项(例如 --asdf
)。
问题是,如果我要求基本解析器解析包含 --asdf
的参数,Scopt 会抱怨:
[error] Error: Unknown option --asdf
[error] Usage: Config [options]
[error]
[error] -c <value> | --cluster <value>
[error] Cluster the machine is part of
[error] -p <value> | --port <value>
[error] Port to listen on
...
[error] Exception in thread "main" java.util.NoSuchElementException: None.get
有没有办法让它忽略未知参数?
定义自定义OptionParser
的时候,简单的放一个extra
override def errorOnUnknownArgument = false
进入定义。例如,
def optionParser = new OptionParser[CustomConfig]("Config") {
override def errorOnUnknownArgument = false
opt[String]('a', "asdf") optional () action { (x, c) =>
c.copy(asdf = x)
} text "Do something custom"
...
}
以防万一您正在使用 OParser
// define a setup
val setup: OParserSetup = new DefaultOParserSetup {
override def errorOnUnknownArgument: Boolean = false
}
// then pass setup to parse function
OParser.parse(parser, args, YourConfig(), setup)