gpt4 book ai didi

python - 如何在 C 中创建和分配 Python 变量?

转载 作者:太空宇宙 更新时间:2023-11-03 23:34:55 25 4
gpt4 key购买 nike

我已经通过以下方式初始化了 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__");

获取主环境的 Hook 。然后调用

PyModule_AddStringConstant(py_main, "string_name", str);

将C字符串带入python环境。

要验证一切都已完成,只需尝试:

PyRun_SimpleString("print dir()");
PyRun_SimpleString("print string_name");

你会看到“string_name”字符串出现在 dir() 列表中,并通过 python 打印它!

最佳答案

这应该做你想做的:

char *cStr = "Some text here.";

PyObject *pyStr = Py_BuildValue("s", cStr);

http://docs.python.org/c-api/arg.html#Py_BuildValue

当然,如果您正在使用 Python 3(或将来使用它),可能会出现您希望使用“y”而不是“s”并获得 bytes 对象而不是 str

更新:糟糕,我忘记了更简单的方法。

PyObject *pyStr = PyString_FromString(cStr);

http://docs.python.org/c-api/string.html#PyString_FromString

(在 Python 3 中是 PyBytes_FromString()。)

您可能想看看 http://docs.python.org/extending/embedding.html了解更多信息。


这里还有一些您可能想尝试的东西。见

http://docs.python.org/c-api/module.html#PyModule_AddObject
或者可能
http://docs.python.org/c-api/module.html#PyModule_AddStringConstant

对于前者,它就像

errorcheck = PyModule_AddObject(embmodule, "str", pyStr);

对于后者,类似

errorcheck = PyModule_AddStringConstant(embmodule, "str", cStr);

关于python - 如何在 C 中创建和分配 Python 变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6281781/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com