Golang -读取后从标准输入阅读用户输入

j13ufse2  于 2022-12-28  发布在  Go
关注(0)|答案(1)|浏览(172)

我希望能够从stdin完全读取,然后获得输入,也是从stdin。我可以读取发送到我的代码的输入,但我不能读取用户输入。有什么方法可以解决这个问题吗?我正在编写分页工具,我正在这样做。

Read incoming

    scanner := bufio.NewScanner(os.Stdin)
    for scanner.Scan() {
        sb.WriteString(fmt.Sprintf("%s\n", scanner.Text()))
    }

Reading user input

    reader := bufio.NewReader(os.Stdin)
    text, _ := reader.ReadString('\n')

下面是从stdin读取然后尝试从输入读取的代码的一部分。当第一次读取stdin时,ReadString('\ n')不等待,并导致零长度字符串。如果读取了ReadString,但从stdin的第一次读取没有使ReadString正确等待。我在第二次调用中得到EOF。我将对此进行研究,看看我能做些什么。

var r = bufio.NewReader(os.Stdin)

var contents string
var err error
contents, err = io.ReadAll(r)
if err != nil {
    panic(err)
}

text, err := r.ReadString('\n')
if err != nil {
    fmt.Println(err)
}
fmt.Println(txt)
mklgxw1f

mklgxw1f1#

我的代码首先从stdin读取任何输入,我使用cat将文本发送到程序,当我这样做时,我可以从stdin读取输入,但如果我尝试使用reader.readString('\ n')或fmt.Scanln()读取键入的输入,什么也得不到。
你像cat file.txt | program一样运行你的程序,然后你输入更多的输入,并试图读取它。
程序的stdin通常是从父进程继承的,如果你运行的是交互式环境,那就是从终端(如键盘)输入。
cat file.txt | program重定向stdin以从cat的输出读取。Stdin不再从端子指向输入。
你必须重新打开一个到终端的流并写入它,你可以通过从/dev/tty . tty, err := os.Open("/dev/tty")阅读来完成。

相关问题