【发布时间】:2011-09-11 00:38:11
【问题描述】:
我已经通过
初始化了 Python 环境Py_Initialize();
我没有将外部 Python 模块导入环境,一切正常。但是当我需要将一个 C 字符串传递到这个环境中时,我就迷路了……
我正在考虑在环境中添加一个函数来分配变量,就像下面的代码一样。
char *str;
str="\
def assign_var(str):\
global string\
string = str";
PyRun_SimpleString(str);
然后在 C 中调用这个函数,并将转换后的 C 字符串作为参数传递。
我不认为我上面提到的都是解决问题的好方法......
我怎样才能做到这一点?
解决方案:
最后,在Peter Mortensen 的帮助下,这是解决方案。 (感谢彼得莫滕森!)
由于我初始化的 python 环境是一个纯空环境(没有任何导入的模块)。我用
py_main = PyImport_AddModule("__main__");
获取主环境的钩子。然后调用
PyModule_AddStringConstant(py_main, "string_name", str);
将 C 字符串带入 python 环境。
要验证一切是否已完成,请尝试:
PyRun_SimpleString("print dir()");
PyRun_SimpleString("print string_name");
你会看到你的 "string_name" 字符串出现在 dir() 列表中并让它被 python 打印出来!
【问题讨论】:
-
也许this 的变体会起作用?
-
@senderle 抱歉,that case,他已经在模块中有一个变量 g,但在我的情况下,我没有...感谢您的评论,我已经重新定义了我的标题问题(添加“创建”)
-
我的想法是,您可以使用
PySys_GetObject获得对__main__的引用。但是,如果不确切知道自己在做什么,就很难说出自己想要发生的事情。