Расширение Python C: извлечение параметра из движка

Я хотел бы использовать Python для выполнения тестов по математике в моих функциях. Типичная программа, которая может получить доступ к Python:

#include <iostream>
#include <string>
#include <Python.h>
int RunTests()
{
Py_Initialize();

PyRun_SimpleString("a=5");
PyRun_SimpleString("b='Hello'");
PyRun_SimpleString("c=1+2j");
PyRun_SimpleString("d=[1,3,5,7,9]");

//question here

Py_Finalize();
return 0;
}

Мой вопрос: как я могу извлечь параметры a,b,c,d в PyObjects?

0

Решение

PyRun_SimpleString() выполняет код в контексте __main__ модуль. Вы можете получить ссылку на этот модуль, используя PyImport_AddModule(), получить словарь глобальных переменных из этого модуля и искать переменные:

PyObject *main = PyImport_AddModule("__main__");
PyObject *globals = PyModule_GetDict(main);
PyObject *a = PyDict_GetItemString(globals, "a");

Вместо того, чтобы использовать этот подход, вам может быть лучше создать новый globals словарь и использование PyRun_String() выполнить код в контексте этого globals ДИКТ:

PyObject *globals = PyDict_New();
PyObject *a = PyRun_String("5", Py_single_input, globals, globals);

Таким образом, вам не нужно сначала сохранять результат вашего выражения в некоторой переменной, а затем извлекать его из глобальной области видимости __main__, Вы все еще можете использовать переменные для хранения промежуточных результатов, которые затем можно извлечь из globals как указано выше.

1

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

Других решений пока нет …

По вопросам рекламы [email protected]