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

Posted

技术标签:

【中文标题】如何在不将其连接到终端的情况下运行“屏幕”,以便可以在 C++ (qt) 应用程序中捕获输出?【英文标题】:How can I run 'screen' without it being attached to a terminal so that I can capture the output in a C++ (qt) app? 【发布时间】:2019-04-23 06:16:43 【问题描述】:

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

screen /dev/tty.SLAB_USBtoUART 115200

我不想在终端中显示输出,而是希望能够在我的 C++ (qt) 应用程序中逐行读取它,以便处理它并在 GUI 中显示它。

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

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

【问题讨论】:

【参考方案1】:

您可以使用boost serial port 来读取传入的数据。请注意,这必须在线程中或使用Qt Concurrent 完成。从这个线程你可以发送signals 连接到你的数据显示的正确插槽将获取数据并显示它。但是,Qt 还提供了一个可以使用的串行端口类:QSerialPort。我建议使用QTextEdit 作为您的显示小部件,使用QTextEdit::append 作为您的插槽。

【讨论】:

以上是关于如何在不将其连接到终端的情况下运行“屏幕”,以便可以在 C++ (qt) 应用程序中捕获输出?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不将Dock设置为Fill的情况下将Label置于Panel内部

INSERT IF NOT EXISTS 类型函数供我在不将列转换为主键的情况下使用?

如何在不将其添加到目录的情况下在多个团队中安装机器人?

如何在不将其注册为机器人的情况下创建不和谐机器人?

我可以在不将实体连接到数据库表的情况下使用 ORM

如何在不将其备份到 iCloud 的情况下为我的应用程序提供演示数据?