CommandLineKit 2.3.0

CommandLineKit 2.3.0

Ingmar Stein 维护。



CommandLineKit Build Status

一个用于创建命令行界面的纯 Swift 库。

注意:CommandLineKit 的 master 需要使用 Xcode 10.2 / Swift 5.0。如果您正在使用更早版本的 Swift,请查看早期版本

使用方法

CommandLine 的 API 设计简单易懂。

import CommandLineKit

let cli = CommandLineKit.CommandLine()

let filePath = StringOption(shortFlag: "f", longFlag: "file", required: true,
  helpMessage: "Path to the output file.")
let compress = BoolOption(shortFlag: "c", longFlag: "compress",
  helpMessage: "Use data compression.")
let help = BoolOption(shortFlag: "h", longFlag: "help",
  helpMessage: "Prints a help message.")
let verbosity = CounterOption(shortFlag: "v", longFlag: "verbose",
  helpMessage: "Print verbose messages. Specify multiple times to increase verbosity.")

cli.addOptions(filePath, compress, help, verbosity)

do {
  try cli.parse()
} catch {
  cli.printUsage(error)
  exit(EX_USAGE)
}

print("File path is \(filePath.value!)")
print("Compress is \(compress.value)")
print("Verbosity is \(verbosity.value)")

有关附加选项类型,请参阅 Option.swift

要在项目中使用 CommandLineKit,请将其添加到工作空间,然后将 CommandLineKit.framework 添加到目标的 构建阶段/将库与二进制文件链接 设置。

如果您正在构建命令行工具并需要将其与其他框架嵌入其中,请按照该链接中的步骤操作,以将 Swift 框架链接到您的命令行工具。

如果您正在构建独立的命令行工具,您需要直接将 CommandLineKit 源文件添加到目标,因为 Xcode 尚无法构建包含 Swift 代码的静态库

特性

自动生成的使用消息

Usage: example [options]
  -f, --file:    
      Path to the output file.
  -c, --compress:
      Use data compression.
  -h, --help:    
      Prints a help message.
  -v, --verbose:
      Print verbose messages. Specify multiple times to increase verbosity.

您可以通过提供formatOutput函数来完全自定义使用消息。例如,[Rainbow](https://github.com/onevcat/Rainbow) 提供了一种方便的方式来生成带有颜色的输出

import Rainbow

cli.formatOutput = { s, type in
  var str: String
  switch(type) {
  case .Error:
    str = s.red.bold
  case .OptionFlag:
    str = s.green.underline
  case .OptionHelp:
    str = s.blue
  default:
    str = s
  }

  return cli.defaultFormat(str, type: type)
}

支持所有常用的标志样式

这些命令行是等效的

$ ./example -c -v -f /path/to/file
$ ./example -cvf /path/to/file
$ ./example -c --verbose --file /path/to/file
$ ./example -cv --file /path/to/file
$ ./example --compress -v --file=/path/to/file

可以使用'--'来停止选项处理,如同getopt(3)中那样。

智能处理负整数和浮点参数

这会将负42传递给整数选项,并将负3.1419传递给浮点选项

$ ./example2 -i -42 --float -3.1419

区域感知浮点解析

在区域使用不同的十进制分隔符时,浮点数将正确处理

$ LC_NUMERIC=sv_SE.UTF-8 ./example2 --float 3,1419

类型安全的枚举选项

enum Operation: String {
  case create  = "c"
  case extract = "x"
  case list    = "l"
  case verify  = "v"
}

let cli = CommandLineKit.CommandLine()
let op = EnumOption<Operation>(shortFlag: "o", longFlag: "operation", required: true,
  helpMessage: "File operation - c for create, x for extract, l for list, or v for verify.")
cli.setOptions(op)

do {
  try cli.parse()
} catch {
  cli.printUsage(error)
  exit(EX_USAGE)
}

switch op.value {
  case Operation.Create:
    // Create file

  case Operation.Extract:
    // Extract file

  // Remainder of cases
}

注意:枚举必须可以从字符串值初始化。

完全符合 Emoji 规范

$ ./example3 -👍 --👻

(请不要真的这样做)

许可协议

版权归属 (c) 2014 Ben Gollmer。

遵循 Apache 许可协议,版本 2.0(“许可协议”);除非法律要求或书面同意,否则不得使用本文件,除非符合许可协议。您可以在以下地址获取许可协议的副本:

http://www.apache.org/licenses/LICENSE-2.0

除非法律规定或书面同意,否则在许可证下分发的软件按“现状”提供,不提供任何明示或暗示的保证或条件。有关许可证下授予的权限和限制的具体语言,请参阅许可证。