2014-01-31 3 views
1

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

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; 

} 
+0

Вы можете сделать это с помощью команды echo "command \ ncommand2" | как ваш параметр, если вы используете * nix-системы. – Lefsler

+0

Это не работает (input1 \ input2). Это не аргумент командной строки. – shantanu

ответ

1

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

+0

Это работает, но еще одна проблема. Теперь программа не заканчивается. результат возвращается правильно, но не завершается. Когда я использую флаг «r», он успешно завершается. – shantanu

+0

Похоже, вы можете читать или писать с помощью всплывающего окна. Не читайте и не пишите. Взгляните на этот http://stackoverflow.com/questions/6171552/popen-simultaneous-read-and-write, который может иметь решение для вас. – HughB

Смежные вопросы