gpt4 book ai didi

c++ - Python C API - 创建关键字

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:03:28 24 4
gpt4 key购买 nike

我在尝试从我的 C++ 代码调用 Python 函数时遇到了麻烦。

我正在尝试使用以下参数调用 Django 函数 call_command:

    call_command('test', stdout=content)

参见 here为什么。这将运行没有 stdout=content 参数的命令:

    PyObject_CallFunctionObjArgs(executeFunc, PyString_FromString("test"), NULL)

我这辈子都想不出如何创建这个关键字。

    PyDict_New();
PyDict_SetItemString(...);

给我一​​个 'stdout'='content' 字符串,而不是 stdout=content。

    Py_BuildValue("{s=s}", ... , ...) 

做同样的事情。

如有必要,我可以毫无问题地获取 PyObject 的内容,如果 Python 在某些时候不放置引号(将其作为字符串处理),我似乎无法正确创建 stdout 关键字参数。

如何从 C API 调用 call_command('test', stdout=content)?

最佳答案

PyObject *args = Py_BuildValue("(s)", "test");
PyObject *kwargs = PyBuildValue("{s:O}", "stdout", content);

PyObject_Call(executeFunc, args, kwargs);

请注意,即使在 Python 中,您也可以用相同的方式调用该函数:

args = ("test",)
kwargs = {"stdout" : content}

call_command(*args,**kwargs)

"stdout"也是一个带引号的字符串,但它可以工作。您试图获得与在 Python 中使用的语法相同的语法,使用 noquotename=noquotevalue,但语法只是一种表示。 {"quotedname": noquotevalue} 和 noquotename=noquotevalue 都是表示同一事物的两种不同方式。它们实际上都代表一个字典,其键是一个字符串,值是一个对象。这就是您作为第三个参数传递给 PyObject_Call 的内容。

关于c++ - Python C API - 创建关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17045708/

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