Как передать флаги в качестве аргумента команды urface / cli? - PullRequest
0 голосов
/ 25 июня 2019

Я использую urfave / cli для создания приложения CLI в Go.

Мне хотелось бы, чтобы параметры, заданные после первой команды, рассматривались как аргументы, а не как флаги (чтобы я мог обрабатывать их самостоятельно или передавать их в другой исполняемый файл).

При использовании app.Action (см. Ниже), это поведение, которое я получаю, но если я использую cli.Commands, то я получаю ошибку.

package main

import (
    "fmt"
    "github.com/urfave/cli"
    "log"
    "os"
)

func main() {
    app := cli.NewApp()

    app.Commands = []cli.Command{
        {
            Name:    "test",
            Action:  func(c *cli.Context) error {
                fmt.Println("test", c.Args())
                return nil
            },
        },
    }

    app.Action = func(c *cli.Context) error {
        fmt.Println(c.Args())
        return nil
    }

    err := app.Run(os.Args)
    if err != nil {
        log.Fatal(err)
    }
}

Вывод: go run main.go cmd -f flag:

[cmd -f flag]

но go run main.go test cmd -f flag выходит с ошибкой, где я хотел бы, чтобы он вывел

test [cmd -f flag]

1 Ответ

0 голосов
/ 26 июня 2019

После просмотра документации cli.Command на самом деле очень простой способ получить то, что я хочу: установка SkipFlagParsing в значение true будет рассматривать все флаги как обычные аргументы.

app.Commands = []cli.Command{
    {
        Name:    "test",
        SkipFlagParsing: true
        Action:  func(c *cli.Context) error {
            fmt.Println("test", c.Args())
            return nil
        },
    },
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...