PyObject* PyRun_String(const char *str, int start, PyObject *globals, PyObject *locals);
Если вы хотите, чтобы Истина и Ложь, они должны быть в соответствии с указанием *globals
, передаваемым переводчику. Вы можете исправить это, позвонив по номеру PyEval_GetBuiltins
.
.
Из исходного кода Python 2.6:
if (PyDict_GetItemString(globals, "__builtins__") == NULL) {
if (PyDict_SetItemString(globals, "__builtins__",
PyEval_GetBuiltins()) != 0)
return NULL;
}
Если это не сработает, вы можете попробовать PyRun_String("import __builtin__ as __builtins__", globals, locals)
перед вызовом PyRun_String("True", ...)
.
Вы можете заметить, что интерактивный интерпретатор Python всегда запускает код в модуле __main__
, который мы не потрудились создать здесь. Я не знаю, нужен ли вам модуль __main__
, за исключением того, что есть много скриптов, которые содержат if __name__ == "__main__"
.