GoLang - termbox:恐慌:打开/ dev / tty:没有这样的设备或地址

时间:2014-02-18 06:25:07

标签: go ubuntu-12.04 tty

我在Ubuntu 12.04 LTS机器上使用Go 1.2进行编码 - 使用LiteIDE(非常满意)。

我下载并安装了go termbox package - 构建了demo keyboard.go - 构建得很好。

但是当我从LiteIDE运行时,我得到了这种恐慌 - 所有的termbox演示也是如此:

panic: open /dev/tty: no such device or address

任何线索都会有所帮助......

1 个答案:

答案 0 :(得分:5)

好的,这是完全合理的:交互式终端应用程序要求终端可用。终端可能是真实的 - hardware - 或虚拟(如您在按Ctrl-Alt-F1时在典型的x86机箱上看到的Linux虚拟终端)或模拟(如xterm,rxvt,GNOME终端和吨提供的那些)其他人。)

与Windows相反,运行类型为“console”的程序强制创建一个控制台窗口并附加一个应用程序,在POSIX系统上没有应用程序的“类型”,如果一个应用程序想要一个真正的终端可用于其I / O,它会对此执行特殊检查,如果失败,应用程序会发出错误并退出 1 。现在很少有人可以访问真正的硬件终端,因此大部分时间都使用仿真,然后我们讨论所谓的pseudo terminals. Linux虚拟终端和GUI终端仿真器以及{{1}等终端控制台多路复用器}和screen - 所有这些都为运行他们控制的程序分配伪终端。

所以基本上你有这些选择:

  • 在IDE中查找设置,使其在运行程序时分配伪终端。有些程序可以通过将终端模拟器嵌入到UI中或通过显式运行来实现。

  • 教您的IDE在终端模拟器中运行您的程序。他们中的大多数都遵守古老的tmux建立的约定并接受xterm命令行选项,因此不是

    -e <program>

    你的IDE应该运行

    ./myprogram
    

    如果您使用的是Debian系统或其衍生产品,则可能会侥幸成瘾

    xterm -e ./myprogram
    

    应该产生您首选的终端仿真器程序。

  • 停止在IDE中运行代码,并使用常规

    在终端仿真器中执行此操作
    x-terminal-emulator -e ./myprogram
    

    的工作流程。

我从未使用LiteIDE,所以没有立即体验如何做到这一点 - 你必须自己做研究。


1 有些程序可以使用或不使用shell(如go build ./myprogram bash)和解释器(如zshTcl)是很好的例子:当他们检测到可用的终端设备时,他们进入交互模式,启用行编辑等,否则他们只是从他们的标准输入中读取代码并执行它。另一个很好的例子是Git:它的高级程序检测它们是否连接到一个终端,如果是这样,它们可以启用它们的输出着色并自动产生一个寻呼机程序,如果它们的输出即将溢出单个屏幕线;否则他们会大惊小怪,只是将输出转储到标准输出流。