我尝试使用基本的 bash 命令read从键盘捕获单个字符。但是即使我尝试了多种方法,似乎也很难获得输出。示例代码:fmt.Println(exec.Command("read", "-t", "5", "-n", "1").Output())它的意思是“等待 5 秒从键盘获取 1 个输入字符”。从上面的代码中,我希望看到我的输入字符与其错误一起打印出来,但我得到的是输出:[] exit status 1此输出仅在不到 1 秒的时间内立即打印,这与代表等待 5 秒"-t", "5"的read命令参数冲突。我尝试在 1 秒内输入一些字符,但似乎根本不起作用。顺便说一句,如果试试这个fmt.Println(exec.Command("echo", "\"Hi!\"").Output())输出:[34 104 105 34 10] <nil>在这里似乎在这里工作很简单echo。
1 回答
烙印99
TA贡献1829条经验 获得超13个赞
您没有提供带有 stdin 的命令,因此它无法读取任何内容并立即退出。
如果您想将它与调用程序连接到相同的标准输入,您可以使用:
cmd := exec.Command("read", "-t", "5", "-n", "1")
cmd.Stdin = os.Stdin
out, err := cmd.CombinedOutput()
fmt.Println("error:", err)
fmt.Printf("output: %q\n", out)
然而,这不会输出任何内容,因为/usr/bin/read脚本不会打印任何内容。您可能希望在 shellread的上下文中调用内置的 shell。这将打印字符读取:
cmd := exec.Command("bash", "-c", "read -t 5 -n 1 C && echo -n $C")
cmd.Stdin = os.Stdin
但最后,您可能应该直接从 go 中的 stdin 读取。
- 1 回答
- 0 关注
- 133 浏览
添加回答
举报
0/150
提交
取消