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



我正在一个使用四旋翼机和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时显示的内容相同,但我不知道如何在C++代码中发送help之类的命令。

如果您阅读该程序,while语句允许我在终端中捕获程序mavproxy.pycout生成的参数,但mavlink.py永远不会结束,直到您在终端出口中写入内容或按CTRL+C,因此while循环永远不会结束。

我一直在读关于Popen函数的文章,但我还没有找到正确的形式。

我知道我可以在程序中使用mavlink.h库并将参数发送到四旋翼机,但不想用mavlink.h这样做。

我不确定我是否理解您的问题,但我认为您希望向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);

最新更新