我使用 cobra 创建 CLI 命令工具。除了错误处理,一切看起来都很好
我想要的是如果错误发送了命令(错误的参数或错误的输入)返回std.err而不是std.out
为了简化 secnario 我创建了这个来演示我的用例
package main
import (
"errors"
"fmt"
"os"
"github.com/spf13/cobra"
)
var (
RootCmd = &cobra.Command{
Use: "myApp",
Run: func(cmd *cobra.Command, args []string) {
fmt.Printf("ROOT verbose = %d, args = %v\n", args)
},
}
provideCmd = &cobra.Command{
Use: "provide",
Run: nil,
}
appCmd = &cobra.Command{
Use: "apps",
RunE: func(cmd *cobra.Command, args []string) error {
name := args[0]
if name != "myapp" {
err := errors.New("app name doesnt exist")
return err
}
return nil
},
SilenceUsage: true,
}
)
func init() {
// Add the application command to app command
provideCmd.AddCommand(appCmd)
// add provide command to root command
RootCmd.AddCommand(provideCmd)
}
func main() {
if err := RootCmd.Execute(); err != nil {
fmt.Println(err)
os.Exit(-1)
}
}
现在,如果我编译二进制文件并exec.Command针对二进制文件运行,一切都会按预期工作。但是如果我想测试错误场景就像mycli provide apps apps1 我想看到返回的std.err而不是std.out
当我执行时,mycli provide apps myapp一切都应该没问题
但是如果我运行mycli provide apps myapp2我想得到 std.err 而不是 std.out ,这里不是这种情况......我在这里错过了什么?
https://play.golang.org/p/B00z4eZ7Sj-
慕妹3242003
相关分类