Picocli:如何始终显示标题/横幅

时间:2018-10-22 11:25:33

标签: command-line command-line-interface picocli

Picocli可以在@Command批注中添加漂亮的标题,例如:

@Command(name = "git-star", header = {
    "@|green       _ _      _             |@", 
    "@|green  __ _(_) |_ __| |_ __ _ _ _  |@",
    "@|green / _` | |  _(_-<  _/ _` | '_| |@",
    "@|green \\__, |_|\\__/__/\\__\\__,_|_|   |@",
    "@|green |___/                        |@"},
    description = "Shows GitHub stars for a project",
    mixinStandardHelpOptions = true, version = "git-star 0.1")

我如何在程序运行时始终显示标题/横幅,而不在两个位置重复显示此横幅?

(另请参见https://github.com/remkop/picocli/issues/517

2 个答案:

答案 0 :(得分:1)

这有两个方面:

  • 如何从应用程序中获取横幅文字?
  • 如何呈现ANSI颜色和样式?

您可以使用new CommandLine(new App()).getCommandSpec().usageHelpMessage().header()或通过在应用程序中插入带有注释的@Spec的{​​{1}}字段来从使用帮助消息中获取横幅。

要呈现ANSI样式,请对每个横幅行使用CommandSpec

将它们放在一起:

CommandLine.Help.Ansi.AUTO.string(line)

答案 1 :(得分:0)

对于我在 Picocli 4.5.2 中的工作方式:

def sequence_mask(X, valid_len, value=0):
    """Mask irrelevant entries in sequences."""
    maxlen = X.size(1)
    mask = torch.arange((maxlen), dtype=torch.float32,
                        device=X.device)[None, :] < valid_len[:, None]
    X[~mask] = value
    return X