Interactive — запускать программу из исходного кода C ++, требующего многократного ввода

Мне нужно бежать RNAeval (исполняемый) из кода C ++ и читать вывод RNAeval, Я нашел код, который может запустить команду и прочитать вывод.

string exec(char* cmd) {
FILE* pipe = popen(cmd, "r");
if (!pipe) return "ERROR";
char buffer[128];
std::string result = "";
while(!feof(pipe)) {
if(fgets(buffer, 128, pipe) != NULL)
result += buffer;
}
pclose(pipe);
return result;
}

Но RNAeval не принимает аргументов командной строки Вместо этого мне нужно предоставить вход после запуска программы (аналогично bc в Linux).

RNAeval [enter]
input1 [enter]
input2 [enter]
return output by RNAeval and exit

Как я могу сделать это с C ++?

система:

Linux
g++
gcc
string exec(char* cmd) {
FILE* pipe = popen(cmd, "w");
if (!pipe) return "ERROR";
char buffer[128];
std::string result = "";
fprintf(pipe,"%s\n","acgt");
fprintf(pipe,"%s\n","(())");
fprintf(pipe,"%s\n","@");
while(!feof(pipe)) {
if(fgets(buffer, 128, pipe) != NULL)
result += buffer;
}
pclose(pipe);
return result;

}

1

Решение

popen возвращает объект FILE, который вы можете использовать для записи входного потока RNAEval. Вы можете использовать fprintf для записи команд в процесс после того, как вы сделаете popen, а затем прочитаете результаты.

1

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

Других решений пока нет …

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