Выполнение командной оболочки из popen и установка другой командной оболочки

Я работаю в проекте с квадротором и mavlink. Я успешно установил mavproxy на свой ПК с Ubuntu и без проблем запустил его с терминала. Когда я бегу 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.

У меня есть код для выполнения mavlink.py из C ++

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.py а также cout в терминале, но mavlink.py никогда не заканчивается, пока вы не напишите что-нибудь в терминале выхода или нажмите CTRL + С Итак while цикл никогда не заканчивается

Я читал о функции Popen, но я не нашел правильную форму для этого.

Я знаю, что могу использовать mavlink.h библиотеку в моей программе и отправлять параметры в квадротор, но не хочу делать это с mavlink.h,

1

Решение

Я не уверен, что понимаю ваш вопрос, но я думаю, что вы хотите отправить команды 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);
0

Другие решения


По вопросам рекламы [email protected]