Мне нужно бежать 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;
}
popen возвращает объект FILE, который вы можете использовать для записи входного потока RNAEval. Вы можете использовать fprintf для записи команд в процесс после того, как вы сделаете popen, а затем прочитаете результаты.
Других решений пока нет …