英文:
Control fmt.Parse output on Parsing Error
问题
var timesFlag int
flag.IntVar(×Flag, "times", 1, "打印次数")
flag.Parse()
如果我运行程序并输入 prog -times=abc(<--- 不是整数)
fmt.Parse 会在控制台上输出这个丑陋的错误信息:
对于标志 -times,值“-abc”无效:strconv.ParseInt:解析“-abc”时出现无效语法
显然,我无法阻止用户在命令行中输入任何内容。这个错误对用户来说看起来很糟糕,需要更友好的提示。我该如何将这个错误信息静默处理,不让它输出到 stderr/stdout,并检测到有错误发生?
英文:
var timesFlag int
flag.IntVar(&timesFlag, "times", 1, "Number of times to print")
flag.Parse()
If I run the program and type in prog -times=abc (<--- not an int)
fmt.Parse spits out this ugly error message on the console:
invalid value "-abc" for flag -times: strconv.ParseInt: parsing "-abc": invalid syntax
Obviously, I can't prevent the user from typing in anything from the command line. The error looks like garbage to the user and needs to look more friendlier. How do I silent this error from going to stderr/stdout and detect there was an error generated?
答案1
得分: 1
flag.CommandLine
是一个类型为 FlagSet
的变量,用于处理命令行参数,如果你使用 flag
包中的函数而不是 FlagSet
类型的方法。
你可以使用 FlagSet.SetOutput()
方法设置输出(一个 io.Writer
),用于打印错误消息。你可以设置一个 bytes.Buffer
,这样消息只会被写入缓冲区而不会显示在控制台上。注意,不要将 nil
设置为输出目标,因为这意味着将消息打印到标准输出(控制台)。
然后自己调用 FlagSet.Parse()
,并将 os.Args[1:]
作为要解析的参数传递进去。FlagSet.Parse()
返回一个 error
,你可以自行处理该错误。
英文:
The flag.CommandLine
variable of type the FlagSet
is used to handle command line arguments if you use the functions of the flag
package which are not methods of the FlagSet
type.
You can set the output (an io.Writer
) where error messages are printed with the FlagSet.SetOutput()
method. You can set a bytes.Buffer
so messages will only end up in a buffer (and not on your console). Note that do not set nil
as that means to print to the standard output (console).
And call FlagSet.Parse()
yourself where you can pass os.Args[1:]
as the arguments to be parsed. FlagSet.Parse()
returns an error
which you can handle yourself.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论