草庐IT

stdin_reader

全部标签

Golang 从 stdin 读取,如何检测特殊键(输入,退格...等)

我有以下从标准输入读取用户输入的程序:varinputstring=""exec.Command("stty","-F","/dev/tty","cbreak","min","1").Run()exec.Command("stty","-F","/dev/tty","-echo").Run()varb[]byte=make([]byte,1)for{input+=string(b)}我想在for循环中放置某种条件,以便在用户按下“enter”(例如)时“中断”,或者在用户按下(退格键)时从字符串中删除一个字符。但是,我不知道这两个键的字节数组或字符串表示形式是什么。我该如何解决这个问题

go - 为什么 conn.Read() 不向 []byte 写入任何内容,但 bufio.Reader.ReadString() 有效?

我有一个连接,是这样创建的:conn,err=net.Dial("tcp","127.0.0.1:20000")我已经尝试通过两种方式从这个连接中读取数据。我认为它们都必须有效,但第一个选项无效。这是第一种方法:varbytes[]bytefori:=0;i这个方法的输出是:[]这是同样的事情,用bufio.Reader完成:funcreadResponse(connnet.Conn)(responsestring,errerror){reader:=bufio.NewReader(conn)_,err=reader.Discard(8)iferr!=nil{return}respon

go - 为什么 conn.Read() 不向 []byte 写入任何内容,但 bufio.Reader.ReadString() 有效?

我有一个连接,是这样创建的:conn,err=net.Dial("tcp","127.0.0.1:20000")我已经尝试通过两种方式从这个连接中读取数据。我认为它们都必须有效,但第一个选项无效。这是第一种方法:varbytes[]bytefori:=0;i这个方法的输出是:[]这是同样的事情,用bufio.Reader完成:funcreadResponse(connnet.Conn)(responsestring,errerror){reader:=bufio.NewReader(conn)_,err=reader.Discard(8)iferr!=nil{return}respon

stream - 如何从一个 io.Reader 获得多个消费者?

我正在编写一个小脚本,它使用bufio.Scanner和http.Request以及并行计算字数和行数的例程。packagemainimport("bufio""fmt""io""log""net/http""time")funcmain(){err:=request("http://www.google.com")iferr!=nil{log.Fatal(err)}//justkeepmainalivewithsleepfornowtime.Sleep(2*time.Second)}funcrequest(urlstring)error{res,err:=http.Get(url)i

stream - 如何从一个 io.Reader 获得多个消费者?

我正在编写一个小脚本,它使用bufio.Scanner和http.Request以及并行计算字数和行数的例程。packagemainimport("bufio""fmt""io""log""net/http""time")funcmain(){err:=request("http://www.google.com")iferr!=nil{log.Fatal(err)}//justkeepmainalivewithsleepfornowtime.Sleep(2*time.Second)}funcrequest(urlstring)error{res,err:=http.Get(url)i

bash - 在程序开始时读取所有 stdin 会阻止在程序期间从 stdin 读取

我有一个golang程序,可以为jq做一个简单的repl。.我希望能够在程序启动时从stdin读取输入到一个临时文件中,这样我就可以将repl与管道输入一起使用。catfile.json|jqrepl但是,当我使用扫描仪或读取器从标准输入读取时,我到达了标准输入的EOF,然后我无法再接受来自标准输入的主repl循环的输入。Readline立即失败,因为它处于EOF。我尝试过延迟Reader.UnreadByte、关闭扫描器、大量“seek(0)”以及其他对标准输入的原始操作。有没有办法重置标准输入以便再次读取它?理想情况下,我会读到EOF,将其保存到临时文件,然后进入repl模式。谢谢

bash - 在程序开始时读取所有 stdin 会阻止在程序期间从 stdin 读取

我有一个golang程序,可以为jq做一个简单的repl。.我希望能够在程序启动时从stdin读取输入到一个临时文件中,这样我就可以将repl与管道输入一起使用。catfile.json|jqrepl但是,当我使用扫描仪或读取器从标准输入读取时,我到达了标准输入的EOF,然后我无法再接受来自标准输入的主repl循环的输入。Readline立即失败,因为它处于EOF。我尝试过延迟Reader.UnreadByte、关闭扫描器、大量“seek(0)”以及其他对标准输入的原始操作。有没有办法重置标准输入以便再次读取它?理想情况下,我会读到EOF,将其保存到临时文件,然后进入repl模式。谢谢

golang 从 stdin 读取长文本

我想从os.Stdin读取一段很长的文本,但我做不到。已经阅读了主题中的所有内容,尝试了应该有效的代码。无论如何,每个方法都会在4096个字符之后剪切。例如。here是一个工作示例。第一次运行循环后,它读取前4096个字符,然后等待每次输入的更多处理,直到我用EOF(Ctrl+D)结束它。fmt.Scan、bufio.NewScanner、bufioReadLine、ioutil.ReadAll也是如此。如果我将它保存到一个文件中并读取它,它会按预期工作。从标准输入它没有。我在ArchLinux上,32位,Go1.7,在mate-terminal1.14,tty8.25中测试,两者都一

golang 从 stdin 读取长文本

我想从os.Stdin读取一段很长的文本,但我做不到。已经阅读了主题中的所有内容,尝试了应该有效的代码。无论如何,每个方法都会在4096个字符之后剪切。例如。here是一个工作示例。第一次运行循环后,它读取前4096个字符,然后等待每次输入的更多处理,直到我用EOF(Ctrl+D)结束它。fmt.Scan、bufio.NewScanner、bufioReadLine、ioutil.ReadAll也是如此。如果我将它保存到一个文件中并读取它,它会按预期工作。从标准输入它没有。我在ArchLinux上,32位,Go1.7,在mate-terminal1.14,tty8.25中测试,两者都一

file - 如何在 Go 中的 io.Reader 上测试 EOF?

Go的io.Reader文档指出Read()可能会返回一个非零的n值和一个io.EOF同时。不幸的是,File的Read()方法不会这样做。当到达EOF时仍然可以读取一些字节,文件的Read方法返回非零n和nil错误。只有当我们已经在文件末尾尝试读取时,我们才返回零n和io.EOF作为错误。如果不尝试从文件中读取数据,我找不到一种简单的方法来测试是否达到了EOF。如果我们使用0字节的缓冲区执行Read(),我们会返回零n和nil错误,尽管我们在文件末尾。为了避免最后一次读取,我找到的唯一解决方案是自己跟踪文件中剩余要读取的字节数。有更简单的解决方案吗? 最佳