#include "python_interpreter.h" #include #include #include #include #include #include #include namespace py = pybind11; PYBIND11_EMBEDDED_MODULE(PythonProviders, m) {} static pybind11::gil_scoped_release* _rel = nullptr; PythonInterpreter::PythonInterpreter() { py::initialize_interpreter(false); } void PythonInterpreter::add_register_callback( std::function&, provider_funct_t)> callback) { py::module PythonProviders = py::module::import("PythonProviders"); PythonProviders.attr("register_product") = callback; } PythonInterpreter::~PythonInterpreter() { if (_rel) delete _rel; py::finalize_interpreter(); } void PythonInterpreter::eval(const std::string& file) { try { py::eval_file(file); } catch (py::error_already_set const& pythonErr) { std::cout << pythonErr.what(); } } void PythonInterpreter::eval_str(const std::string& content) { try { py::eval(content); } catch (py::error_already_set const& pythonErr) { std::cout << pythonErr.what(); } } void PythonInterpreter::release() { _rel = new py::gil_scoped_release(); }