为了账号安全,请及时绑定邮箱和手机立即绑定

如何将标志作为 urface/cli 命令的参数传递?

如何将标志作为 urface/cli 命令的参数传递?

Go
翻翻过去那场雪 2023-06-26 17:18:04
我正在使用urfave/cli在 Go 中构建 CLI 应用程序。我想要的是在第一个命令之后给出的选项被视为参数而不是标志(以便我可以自己处理它们或将它们传递给其他可执行文件)。使用时app.Action(见下文),这是我得到的行为,但如果我使用,cli.Commands则会出现错误。package mainimport (    "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 回答

?
喵喔喔

TA贡献1735条经验 获得超5个赞

查看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

        },

    },

}


查看完整回答
反对 回复 2023-06-26
  • 1 回答
  • 0 关注
  • 159 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号