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

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

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


person Andy N.    schedule 24.05.2015    source источник
comment
Обертывает как на самом деле?   -  person πάντα ῥεῖ    schedule 25.05.2015
comment
Можете ли вы объяснить, что именно вы хотите? Разобрать на С++ в стиле Python или разобрать строки, проанализированные на Python, на С++?   -  person Lapshin Dmitry    schedule 25.05.2015
comment
Таким образом, файл C++ берет строку и изменяет ее в соответствии с некоторыми установленными правилами. Я использую python для извлечения строк из файлов данных в Интернете, которые затем будут использоваться в качестве входных данных в файле C++, но я понятия не имею, как это сделать.   -  person Andy N.    schedule 25.05.2015
comment
Допустим, вы маршалируете свои данные в JSON, CSV или любой другой формат обмена. Затем вам придется разобрать его с помощью C++. Почему бы вам просто не проанализировать исходные данные с помощью C++?   -  person Pierre Prinetti    schedule 25.05.2015


Ответы (3)


Вы можете запустить свой скрипт 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, используйте методы манипулирования процессами для конкретных платформ или boost. Проверь это:

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

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

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

person str14821    schedule 24.05.2015

Если вы имеете в виду вызов программы из Python и выполнение каких-либо действий с ее выводом, вам нужен subprocess< /а> модуль.

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

person Barry    schedule 24.05.2015

Вы хотите взять вывод программы на 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");
person Trevor Hickey    schedule 24.05.2015