用于命令行的 Qt Creator 标准输入,可部署到远程 Linux 主机

Posted

技术标签:

【中文标题】用于命令行的 Qt Creator 标准输入,可部署到远程 Linux 主机【英文标题】:Qt Creator stdin for command line with Deploy to Remote Linux Host 【发布时间】:2012-08-05 20:15:41 【问题描述】:

我正在使用 Qt Creator 的远程部署功能在嵌入式 Linux 目标板上启动我的简单命令行应用程序。我的测试应用程序非常简单,并要求用户打印他/她的名字。它交叉编译、传输到开发板并启动,Qt Creator 底部附近的“应用程序输出”窗口显示“输入您的姓名:”提示,但我无法在任何地方输入并为通过 Qt Creator 远程运行的应用程序提供标准输入。

如何在 Qt Creator 中完成此任务?我可以以某种方式操纵部署“参数”来连接设备以向我的命令行应用程序提供标准输入吗?我也无法通过选中“项目”>“运行配置”下的“在终端中运行”复选框来远程启动应用程序,因为它不可用于远程部署。

代码:

#include <iostream>

using namespace std;

int main() 
    cout << "Enter a number: ";
    int nb;
    cin>>nb;
    cout << "Here is your number:" << nb << endl;
    return 0;

Qt Creator 中的应用程序输出:

Killing remote process(es)...
Starting remote process ...
Remote process started.
Enter a number: d

【问题讨论】:

【参考方案1】:

我发现无法在 IDE 中为 qt creator 启动的应用程序提供标准输入。

我确实尝试了一些东西,看起来命名管道工作得很好。幸运的是,它包含在 Busybox 中,所以它在我的板上。

要使用它,您可以使用“运行设置”下的“设备上的备用可执行文件”选项从 Qt Creator 远程启动应用程序 并将命名管道的最后一行传输到需要标准输入的 c++ 程序。因此,您的“设备上的备用可执行文件如下所示:

cd /home/test; tail -f mypipe | ./test3 –qws

‘test3’是我的程序,/home/test 是可执行文件的位置。

然后打开 1 个额外的 ubuntu 终端并通过 SSH 连接到开发板。现在创建一个名为“mypipe”的命名管道:

mkfifo mypipe

当您的程序期望标准输入启动并等待输入时,您可以回显该输入 其他终端进入命名管道,您的程序会将其作为标准输入:

echo ‘2’ > mypipe

【讨论】:

【参考方案2】:

Debug > Start Debug 子菜单中有更多选项。您还需要一个:附加到正在运行的调试服务器。它确实打开了这个整洁的小窗口:

如您所见,有很多参数,甚至是“在终端中运行”选项,但由于某种原因它在我的机器上不起作用。不要忘记正确设置可执行二进制文件和套件设备设置的本地路径。我还建议您在 Environment > Keyboard 设置中为AttachToRemoteServer 命令绑定热键。

之后,您唯一需要做的就是在远程设备上运行gdbserver

gdbserver :<port> <executable>

正在运行的进程确实有一个正确的stdinstdout 流,您可以通过 SSH 会话在终端中与您的应用程序进行交互。

【讨论】:

以上是关于用于命令行的 Qt Creator 标准输入,可部署到远程 Linux 主机的主要内容,如果未能解决你的问题,请参考以下文章

Linux下Qt Creator编辑器无法输入中文解决

IMX6开发板qt creator直接编译ARM架构程序

windows qt如何通过命令行参数提取带有空格的文件名

ROS:使用Qt Creator创建GUI程序

ROS:使用Qt Creator创建GUI程序

QT creator 常用快捷键