gpt4 book ai didi

go - 模拟标准输入和扫描线上的连续输入

转载 作者:行者123 更新时间:2023-12-03 10:08:56 25 4
gpt4 key购买 nike

我的程序通常使用控制终端从用户读取输入。

// GetCtty gets the file descriptor of the controlling terminal.
func GetCtty() (*os.File, error) {
return os.OpenFile("/dev/tty", os.O_RDONLY, 0)
}

我目前在编程过程中多次构造和 s := bufio.NewScanner(GetCtty()),并用 s.Scan()读取 s.Text()的输入。哪个很好。
但是,为了进行测试,我在stdin上模拟了以下输入到CLI Go-Program中
echo -e "yes\nno\nyes\n" | app
这将无法正常工作,因为 ss.Scan()的第一个构造将已经具有 缓冲的其他测试输入,而 bufio.NewScanner和后续扫描将无法用于新构造。
我想知道如何通过 s *bufio.Scanner从stdin流中仅读取 一行,或者如何模拟输入到控制终端的信息。
我有几个猜测,但不确定它们是否有效:
  • 在整个程序中仅使用一个bufio.Scanner是一种解决方案,但我不想走这种方式...
  • GetCtty()(?)将缓冲的数据写回到s.WriteTo(GetCtty())想要工作,因为东西被附加了而不是放在stdin上?
  • 不知何故,它只读取一行并且不消耗更多字节,这是否意味着不是按块读取而是按字节读取(?)...
  • 最佳答案

    使用iotest.OneByteReader禁用扫描器中的缓冲:

    s := bufio.NewScanner(iotest.OneByteReader(GetCtty()))

    关于go - 模拟标准输入和扫描线上的连续输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65346974/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com