一尘不染

使用Go确定Stdin是否具有数据

go

有没有办法检查输入流(os.Stdin)是否有数据?

从GO的初始stdin中读取帖子?显示了如何读取数据,但是不幸的是,如果没有数据通过管道传送到stdin中,则会阻塞。


阅读 261

收藏
2020-07-02

共1个答案

一尘不染

os.Stdin与其他任何“文件”一样,因此您可以检查其大小:

package main

import (
    "fmt"
    "os"
)

func main() {
    file := os.Stdin
    fi, err := file.Stat()
    if err != nil {
        fmt.Println("file.Stat()", err)
    }
    size := fi.Size()
    if size > 0 {
        fmt.Printf("%v bytes available in Stdin\n", size)
    } else {
        fmt.Println("Stdin is empty")
    }
}

我将其构建为“管道”可执行文件,其工作方式如下:

$ ./pipe
Stdin is empty
$ echo test | ./pipe
5 bytes available in Stdin
2020-07-02