我是 Go 的新手(就像在最后一天一样)并且正在玩一个处理来自 stdin 的数据的简单程序。我想要做的是,如果没有向标准输入提供数据,那么程序将输出一个帮助屏幕,然后退出。我遇到的问题是,当没有通过标准输入提供数据时,程序似乎无限期挂起。这是该程序和我的预期用途的简短示例:package mainimport ( "fmt" "bufio" "os")func main() { scanner := bufio.NewScanner(os.Stdin) scanner.Split(bufio.ScanLines) for scanner.Scan() { str := scanner.Text() fmt.Println(str) }}Running with input:go run test.go < lines.txtline1line2line3Running with no input:go run test.go我不提供输入的第二种情况是导致程序挂起的原因。通读文档,我不清楚如何编写程序以不无限期地等待输入,而是在 stdin 上不存在任何内容时中断。
2 回答
慕姐4208626
TA贡献1852条经验 获得超7个赞
该程序的行为与代码所说的完全一样。代码说从标准输入读取。可以通过重定向提供 stdin 的输入(如您所示)。或者通过管道。或者.... 或者通过用户在键盘上打字。如果在最后一种情况下程序会在人类进入某些东西之前退出,那将是非常令人惊讶的。
一种常见的方法是执行类似(简化)的操作:
var in *os.File
var err error
switch name := flag.Arg(0); {
case name == "":
in = os.Stdin
default:
if in, err = os.Open(name); err != nil {
log.Fatal(err)
}
}
IE。允许处理作为命令行参数给出的命名文件 - 但当没有文件名参数提供给程序时,回退/默认读取标准输入。
这种方法可以很好地与 shell 脚本、通过管道链接命令等配合使用。
- 2 回答
- 0 关注
- 311 浏览
添加回答
举报
0/150
提交
取消