PythonC API创建关键字

2024-06-25 06:44:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从C++代码中调用Python函数遇到麻烦。在

我尝试使用以下参数调用Django函数call_命令:

    call_command('test', stdout=content)

{为什么。这将运行不带stdout=content参数的命令:

^{pr2}$

我一辈子都不知道如何创建这个关键字。在

    PyDict_New();
    PyDict_SetItemString(...);

设置一个'stdout'='content'字符串,而不是stdout=content。在

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

做同样的事情。在

如果需要的话,我可以得到content PyObject,如果没有Python加引号(将其作为字符串处理),我似乎无法正确地创建stdout关键字参数。在

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


Tags: django函数字符串代码test命令new参数
2条回答
PyObject *args = Py_BuildValue("(s)", "test");
PyObject *kwargs = PyBuildValue("{s:O}", "stdout", content);

PyObject_Call(executeFunc, args, kwargs);

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

^{pr2}$

“stdout”也是一个带引号的字符串,但它是有效的。您试图获得与Python中相同的语法,即noquotename=noquotevalue,但语法只是一种表示。{“quotedname”:noquotevalue}和noquotename=noquotevalue是表示同一事物的两种不同方法。它们实际上都表示一个字典,其键是字符串,值是对象。这是作为PyObject_Call的第三个参数传递的。在

Py_BuildValue("{s:O}", "stdout", content_obj)

相关问题 更多 >