Запустите программу из исходного кода С++, которая требует множественного ввода

Мне нужно запустить RNAeval (исполняемый файл) из C++ code и прочитайте вывод 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

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

Система:

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;

}

person shantanu    schedule 31.01.2014    source источник
comment
Вы можете сделать это с помощью команды echo\ncommand2 | program в качестве параметра, если вы используете системы *nix.   -  person Lefsler    schedule 31.01.2014
comment
Это не работает (вход1\вход2). Он не принимает аргумент командной строки.   -  person shantanu    schedule 31.01.2014


Ответы (1)


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

person HughB    schedule 31.01.2014
comment
Работает, но другая проблема. Теперь программа не завершается. результат возвращается правильно, но не завершается. Когда я использую флаг r, он успешно завершается. - person shantanu; 01.02.2014
comment
Похоже, вы можете только читать ИЛИ писать, используя popen. Без чтения и записи. Взгляните на этот stackoverflow.com/questions/6171552/, у которого может быть решение для вас. - person HughB; 01.02.2014