Принимая вход из Python в программу на C ++

Я работаю над программой, которая оборачивает программу на C ++, которая мутирует нуклеотидную последовательность с помощью Python. Я гораздо лучше знаком с Python, чем с C ++, и мне проще разбирать файлы данных, используя Python.

Как мне взять строку, которую я проанализировал в Python, и использовать ее в качестве входных данных для программы на C ++? Программа C ++ сама по себе уже принимает вводимые пользователем строки.

1

Решение

Вы можете запустить свой скрипт на Python как отдельный процесс и получить его полный вывод. В QT вы можете сделать это следующим образом:

QString pythonAddress = "C:\\Python32\\python.exe";
QStringList params;

params << "C:\\your_script.py" << "parameter2" << "parameter3" << "parameter4";

p.start(pythonAddress, params);
p.waitForFinished(INFINITE);
QString p_stdout = p.readAll().trimmed(); // Here is the process output.

Если вы не знакомы с QT, используйте методы управления процессами для конкретной платформы или повышение. Проверь это:

Как выполнить команду и получить вывод команды в C ++?

Как создать процесс в C ++ на Windows?

Выполнить процесс и вернуть его стандартный вывод в VC ++

1

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

Если вы имеете в виду вызов программы из Python и выполнение чего-либо с ее выводом, то вы хотите subprocess модуль.

Если вы хотите представить свою функцию C ++ непосредственно Python, то я бы предложил проверить Boost.Python.

0

Вы хотите взять выходные данные программы на Python и использовать ее в качестве входных данных для программы на C ++?

Вы можете просто использовать оболочку для этого:

python ./program.py | ./c_program

Вы хотите выполнить программу на Python из C ++ и получить вывод обратно в виде строки?
Возможно, есть лучшие способы сделать это, но вот быстрое решение:

//runs in the shell and gives you back the results (stdout and stderr)
std::string execute(std::string const& cmd){
return exec(cmd.c_str());
}
std::string execute(const 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);
if (result.size() > 0){
result.resize(result.size()-1);
}
return result;
}

std::string results_of_python_program = execute("python program.py");
0
По вопросам рекламы [email protected]