【问题标题】:Get output from Ncurses app on a separate terminal在单独的终端上从 Ncurses 应用程序获取输出
【发布时间】:2017-01-03 19:34:49
【问题描述】:

我想要一种解决方案,允许我将 ncurses 应用程序分离到不同的终端仿真器窗口,并在当前窗口中查看标准命令的输出,如“cout” - 用于调试等。

我见过很多写入文件并使用tail 的解决方案,但这似乎很老套而且速度很慢。顺便提一句。我什至不知道从哪里开始,我对 ncurses 很陌生。

【问题讨论】:

  • 您想要应用程序内部的分离(和其他调试逻辑),还是想要制作一个标准的 ncurses 应用程序并有一个用于分离等的外部解决方案?

标签: c++ linux bash debugging ncurses


【解决方案1】:

您可以通过以下两种方式之一来初始化 curses:

  • 使用initscr(使用标准输入/输出),或

  • 使用newterm(可让您指定要使用的输入/输出)

例如,ncurses 测试程序ditto uses newterm 在一个或多个xterm 上打开输出显示。截图如下:

原则上,您可以使用当前终端进行输入,并在另一个上显示ncurses输出em> 终端(虽然是临时的,但我不记得有任何有用的程序可以做到这一点——只有演示)。

【讨论】:

    【解决方案2】:

    首先,ncurses 使用标准输出作为它的输出,所以简单地使用 'cout' 会混淆输出。通常,您会希望使用标准错误 ('cerr') 来代替调试等。

    如果您不想使用简单的文件和tail(这不会很慢,除非您的应用程序在某些方面非常极端),您可以使用这样的命名管道:

    mkfifo debug-pipe
    

    然后在新终端(例如 xterm)中运行您的应用程序并将错误输出重定向到命名管道。

    xterm -e "my-application 2> debug-pipe" &
    

    最后将命名管道转储到第一个终端(或任何终端)。

    cat debug-pipe
    

    (顺便说一句,我想我理解您最初想象的解决方案。如果第二个终端模拟器可以将标准错误重定向到它自己的标准错误,它只会出现在第一个终端中。这很容易一个终端模拟器来做到这一点,但据我所知,没有人有这个选项。)

    【讨论】:

    • 有人能解释一下为什么这个答案没有用,所以我可以尝试改进它吗?
    • 使用这种方法,我没有得到正常的 ncurses 输出(即终端只是保持空白)。但是,当我只是通过管道输入普通文件时,它正在工作。
    • @luator 听起来您重定向了 stdout 而不是 stderr (">" 而不是 "2>")。此方法不应影响标准输出,因此不会影响 ncurses 的输出。
    • 我肯定在使用2>。但是,我今天又试了一次,现在它起作用了。也许这是其他一些不相关的问题。
    【解决方案3】:

    可以使用screentmux 应用程序实现分离和重新附加任何控制台会话。

    【讨论】:

    • 感谢您的帮助,但我需要更多提示,因为这两者都有一个非常(可怕)广泛的手册页,我没有找到有关如何以这种方式使用它们的信息google - 我可能在搜索错误的关键字。当手册达到数千行时,RDFM 还不够 xD
    • 使用 screen 或 tmux 你可以移动整个会话。没有办法使用它们来分隔输出和“查看当前命令中的'cout'等标准命令的输出”,我不认为。
    猜你喜欢
    • 1970-01-01
    • 2023-03-10
    • 2019-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-23
    相关资源
    最近更新 更多