从popen执行命令shell并设置其他命令shell

时间:2014-04-25 20:54:50

标签: c++ linux popen mavlink

我正在使用quadrotor和mavlink开展项目。我已经在我的Ubuntu PC中成功安装了mavproxy,并且在没有终端问题的情况下运行它。当我从终端运行mavproxy.py并连接支持mavlink(APM自动驾驶仪)的四旋翼飞行器时,mavproxy检测到四旋翼飞行器,一切正常。

执行mavproxy.py时,终端中的程序开始发送和接收多个参数。您可以在终端中写入一些参数来访问任何配置。例如,终端中的命令help

$ mavlink.py
.
.data beging
.
STABILIZE>  "when the program finish the configuration, allowed to you for doing an input any parameter, for example help"

STABILIZE>help
show all helps.

我有一个从C ++

执行mavlink.py的代码
include <iostream>
include <stdio.h>

using namespace std;

int main() {
FILE *in;
char buff[512];

if(!(in = popen("mavlink.py", "r"))){
    return 1;
}

while(fgets(buff, sizeof(buff), in)!=NULL){
    cout << buff;
}
pclose(in);

return 0;
}

当我运行这个C ++程序时,终端会显示从终端运行mavproxy.py时出现的相同内容,但我不知道如何发送help之类的命令在C ++代码中。

如果您阅读该程序,while语句允许我捕获终端中程序mavproxy.pycout生成的参数,但mavlink.py永远不会结束你在终端出口写了一些东西或按 CTRL + C 所以while循环永远不会结束。

我一直在阅读有关Popen功能的内容,但我没有找到正确的表格来执行此操作。

我知道我可以在我的程序中使用mavlink.h库并将参数发送到quadrotor,但不希望用mavlink.h执行此操作。

1 个答案:

答案 0 :(得分:0)

我不确定我理解您的问题,但我认为您希望将命令发送到mavlink.py并阅读其输出。

如果是这种情况,您必须将popen()的开放模式从“r”更改为“w”以便您可以编写,然后您可以向其发送命令这样:

FILE *fp;
char *command="HELP";

if(!(fp = popen("mavlink.py", "w"))){
    return 1;

fwrite(command, sizeof(char), strlen(command), fp);