PyObject* PyRun_String(const char *str, int start, PyObject *globals, PyObject *locals);
如果你想要 True 和 False,它们必须在*globals
传递给解释器的 dict 中。你也许可以通过调用来解决这个问题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__"
.