使用 Scallop 的 Scala 命令行解析器

标签 scala

我对 Scala 相当陌生,需要构建一个非常简单的命令行解析器,它提供类似以下内容的内容,我在几分钟内使用 JRuby 创建了这些内容:-

java -jar demo.jar --help

Command Line Example Application

Example: java -jar demo.jar --dn "CN=Test" --nde-url "http://www.example.com" --password "password"

For usage see below:

    -n http://www.example.com
    -p, --password             set the password
    -c, --capi                 set add to Windows key-store
    -h, --help                 Show this message
    -v, --version              Print version

Scallop看起来它可以解决问题,但我似乎找不到一个有效的简单示例!我发现的所有示例似乎都是支离 splinter 的,并且由于某种原因不起作用。

更新

我发现这个示例可行,但我不确定如何将其绑定(bind)到 main 方法中的实际参数中。

import org.rogach.scallop._; 

object cmdlinetest {
  def main(args: Array[String]) 

    val opts = Scallop(List("-d","--num-limbs","1"))
      .version("test 1.2.3 (c) 2012 Mr Placeholder")
      .banner("""Usage: test [OPTION]... [pet-name]
                |test is an awesome program, which does something funny
                |Options:
                |""".stripMargin)
      .footer("\nFor all other tricks, consult the documentation!")
      .opt[Boolean]("donkey", descr = "use donkey mode")
      .opt("monkeys", default = Some(2), short = 'm')
      .opt[Int]("num-limbs", 'k',
      "number of libms", required = true)
      .opt[List[Double]]("params")
      .opt[String]("debug", hidden = true)
      .props[String]('D',"some key-value pairs")
      // you can add parameters a bit later
      .args(List("-Dalpha=1","-D","betta=2","gamma=3", "Pigeon"))
      .trailArg[String]("pet name")
      .verify

    println(opts.help)
  }
}

最佳答案

好吧,我会尝试添加更多示例:)

在这种情况下,使用 ScallopConf 会好得多:

import org.rogach.scallop._

object Main extends App {
  val opts = new ScallopConf(args) {
    banner("""
NDE/SCEP Certificate enrollment prototype

Example: java -jar demo.jar --dn CN=Test --nde-url http://www.example.com --password password

For usage see below:
    """)

    val ndeUrl = opt[String]("nde-url")
    val password = opt[String]("password", descr = "set the password")
    val capi = toggle("capi", prefix = "no-", descrYes = "enable adding to Windows key-store", descrNo = "disable adding to Windows key-store")
    val version = opt[Boolean]("version", noshort = true, descr = "Print version")
    val help = opt[Boolean]("help", noshort = true, descr = "Show this message")

  }

  println(opts.password())
}

它打印:

$ java -jar demo.jar --help

NDE/SCEP Certificate enrollment prototype

Example: java -jar demo.jar --dn CN=Test --nde-url http://www.example.com --password password

For usage see below:

  -c, --capi              enable adding to Windows key-store 
      --no-capi           disable adding to Windows key-store 
      --help              Show this message 
  -n, --nde-url  <arg>     
  -p, --password  <arg>   set the password 
      --version           Print version 

关于使用 Scallop 的 Scala 命令行解析器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13059909/

相关文章:

scala - 在 flatMap 中使用 Try

java - 尝试在 scala 中重写 getListCellRenderComponent 方法时出现对象创建不可能错误

java - Scala 中的 "eval"

scala - 递归创建scala中字符串的所有旋转

scala - 如何在Scala中将类方法作为参数传递

scala - 为什么这个 scala 素数生成如此慢/内存密集?

android - Android 的 Scala 编程

scala - 使用 asInstanceOf 将 Any 转换为 Double

scala - 如何在 Spark 数据框中(均等)分区数组数据

scala - TeamCity 自定义脚本中的 exitCode 不正确