如果某些字符串通过管道传输到其 STDIN,我需要一个命令行实用程序来表现不同。这是一些最小的例子:package main // file test.goimport ( "fmt" "io/ioutil" "os")func main() { bytes, _ := ioutil.ReadAll(os.Stdin) if len(bytes) > 0 { fmt.Println("Something on STDIN: " + string(bytes)) } else { fmt.Println("Nothing on STDIN") }}如果你这样称呼它,这很好用:echo foo | go run test.go如果test.go在 STDIN 上没有任何东西被调用,事情会停留在......bytes, _ := ioutil.ReadAll(os.Stdin)……等着EOF。我需要做什么才能让这一切顺利进行?
3 回答
12345678_0001
TA贡献1802条经验 获得超5个赞
我通过使用 os.ModeCharDevice 解决了这个问题:
stat, _ := os.Stdin.Stat()
if (stat.Mode() & os.ModeCharDevice) == 0 {
fmt.Println("data is being piped to stdin")
} else {
fmt.Println("stdin is from a terminal")
}
- 3 回答
- 0 关注
- 232 浏览
添加回答
举报
0/150
提交
取消