go - 如何在golang终端打印时禁用键盘

标签 go

我正在用 golang 编写一个文本界面,如果您在打印时键入,则会干扰正在显示的文本。我知道“stty -echo”将停止回显键盘的输出,而“stty echo”会重新启用它,但是当我编写如下函数时:

func disableKeyboard() {
  c := exec.Command("stty -echo")
  c.Stdout = os.Stdout
  c.Run()
}

func enableKeyboard() {
  c := exec.Command("stty echo")
  c.Stdout = os.Stdout
  c.Run()
}

这些对我的程序输出没有影响。我发送这些命令的方式有问题吗?

类似于:

disableKeyboard()
time.Sleep(time.Second)
enableKeyboard()

不起作用。我目前使用的是 Mac。

最佳答案

crypto/ssh/terminal package (由于某种原因,它不是标准库)具有可以满足您需要的代码,尽管它使用相当低级的系统调用来实现它。您可能可以将其调整为您想要执行的操作(通过使用 syscall.Stdin 作为文件描述符)。不过,正如 Flimzy 指出的那样,这仍然不会禁用键盘输入,它只是抑制它回显到终端,因此如果稍后依赖它,您可能仍然需要刷新输入。

关于go - 如何在golang终端打印时禁用键盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46776014/

相关文章:

google-app-engine - 如何在 Go App Engine Urlfetch 包中使用 Cookie

go - 如何执行动态解码

unit-testing - golang中可以跳过init方法吗?

android - 在 Android 上运行 go 程序?

go - 如何将结构的多个非空值传递给 golang 中的 hmset?

go - 随机数随时间包

google-app-engine - GAE Golang - 如何正确地将任务队列调度到后端?

linux - 使用 Go 和 './...' 构建所有代码

google-app-engine - 应用引擎 : using a context not associated with a request

rest - 如何在 Go 中执行带有正文的 GET 请求?