为了账号安全,请及时绑定邮箱和手机立即绑定

检查 Golang 的 STDIN 上是否有可阅读的内容

检查 Golang 的 STDIN 上是否有可阅读的内容

Go
PIPIONE 2021-07-30 16:01:58
如果某些字符串通过管道传输到其 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")

}


查看完整回答
反对 回复 2021-08-02
  • 3 回答
  • 0 关注
  • 232 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信