我尝试使用基本bash命令read
从键盘捕获单个字符。但即使我尝试了几种方法,似乎很难获得输出。
示例代码:
fmt.Println(exec.Command("read", "-t", "5", "-n", "1").Output())
它的意思是“等待5秒钟从键盘获得1个输入字符”。从上面的代码我希望看到我的输入字符与错误一起打印出来,但我得到的是
输出:
[] exit status 1
此输出仅在小于1秒的时间内立即打印,与"-t", "5"
命令的read
参数冲突,该命令代表等待5秒。我尝试在1秒内输入一些字符但看起来根本不起作用。
BTW,如果试试这个
fmt.Println(exec.Command("echo", "\"Hi!\"").Output())
输出:
[34 104 105 34 10] <nil>
这里的工作似乎很简单echo
。
答案 0 :(得分:1)
你没有提供带有stdin的命令,因此没有什么可以读取它立即退出。
如果你想将它与调用程序挂起相同的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
脚本不会打印任何内容。您可能希望在shell的上下文中调用内置read
的shell。这将打印出读取的字符:
cmd := exec.Command("bash", "-c", "read -t 5 -n 1 C && echo -n $C")
cmd.Stdin = os.Stdin
但最后,你应该直接从stdin中读取。