Subcommands return ExitSuccess when handling –help and -h flags. (#43) The flags package handles top-level --help and -h flags by printing usage info and then exiting with status 0. Subcommands should handle these help flags similarly, by treating them as success. With this changes, we can correctly distinguish between the following calls: $ cmd subcommand --help # treated as a successful call $ cmd subcommand --bogus # treated as a usage error
Subcommands return ExitSuccess when handling –help and -h flags. (#43)
The flags package handles top-level --help and -h flags by printing usage info and then exiting with status 0.
--help
-h
Subcommands should handle these help flags similarly, by treating them as success.
With this changes, we can correctly distinguish between the following calls:
$ cmd subcommand --help # treated as a successful call $ cmd subcommand --bogus # treated as a usage error
Subcommands is a Go package that implements a simple way for a single command to have many subcommands, each of which takes arguments and so forth.
This is not an official Google product.
Set up a ‘print’ subcommand:
import ( "context" "flag" "fmt" "os" "strings" "github.com/google/subcommands" ) type printCmd struct { capitalize bool } func (*printCmd) Name() string { return "print" } func (*printCmd) Synopsis() string { return "Print args to stdout." } func (*printCmd) Usage() string { return `print [-capitalize] <some text>: Print args to stdout. ` } func (p *printCmd) SetFlags(f *flag.FlagSet) { f.BoolVar(&p.capitalize, "capitalize", false, "capitalize output") } func (p *printCmd) Execute(_ context.Context, f *flag.FlagSet, _ ...interface{}) subcommands.ExitStatus { for _, arg := range f.Args() { if p.capitalize { arg = strings.ToUpper(arg) } fmt.Printf("%s ", arg) } fmt.Println() return subcommands.ExitSuccess }
Register using the default Commander, also use some built in subcommands, finally run Execute using ExitStatus as the exit code:
func main() { subcommands.Register(subcommands.HelpCommand(), "") subcommands.Register(subcommands.FlagsCommand(), "") subcommands.Register(subcommands.CommandsCommand(), "") subcommands.Register(&printCmd{}, "") flag.Parse() ctx := context.Background() os.Exit(int(subcommands.Execute(ctx))) }
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802032778号
subcommands
Subcommands is a Go package that implements a simple way for a single command to have many subcommands, each of which takes arguments and so forth.
This is not an official Google product.
Usage
Set up a ‘print’ subcommand:
Register using the default Commander, also use some built in subcommands, finally run Execute using ExitStatus as the exit code: