如何在不将其连接到终端的情况下运行“屏幕”,以便可以在C ++(qt)应用中捕获输出?

时间:2019-04-23 06:16:44

标签: c++ macos qt gnu-screen

我当前正在使用命令在Mac OS终端中显示嵌入式设备的串行输出

screen /dev/tty.SLAB_USBtoUART 115200

我希望能够在我的C ++(qt)应用程序中逐行读取输出,而不是在终端中显示输出,因此我可以对其进行处理并将其显示在GUI中。

我试图创建一个QProcess对象来运行上面的screen命令,但是屏幕失败,提示“必须连接到终端”。

有没有一种方法可以“伪造”与终端的连接,以便QProcess能够成功运行screen命令?我不需要输入任何命令,只需要捕获嵌入式设备正在编写的输出即可。

2 个答案:

答案 0 :(得分:0)

您可以使用boost serial port读取传入的数据。请注意,这必须在线程中或使用Qt Concurrent完成。您可以从此线程发送signals,该QSerialPort将连接到数据显示器的正确插槽,并将获取并显示数据。但是,Qt还提供了可以使用的串行端口类:QTextEdit。我建议使用QTextEdit::append作为显示小部件,使用https://i.stack.imgur.com/FwoqI.jpg作为您的广告位。

答案 1 :(得分:0)

您可以尝试使用script命令:

$ echo 'echo hello' | screen -
Must be connected to a terminal.

使用脚本:

echo 'echo hello' | script 'screen -'
Script started, output file is screen -
echo hello
bash-3.2$ echo hello
hello
bash-3.2$ exit

Script done, output file is screen -