[英]Python C API - Creating keywords
我在尝试从我的C ++代码调用Python函数时遇到了麻烦。
我正在尝试使用以下参数调用Django函数call_command:
call_command('test', stdout=content)
看到这里的原因。 这将运行不带stdout = content参数的命令:
PyObject_CallFunctionObjArgs(executeFunc, PyString_FromString("test"), NULL)
在我的生活中,我不能弄清楚如何创建这个关键字。
PyDict_New();
PyDict_SetItemString(...);
给我一个'stdout'='content'字符串,而不是stdout = content。
Py_BuildValue("{s=s}", ... , ...)
做同样的事情。
如果有必要,我可以得到内容PyObject没有问题,我似乎无法正确创建stdout关键字参数,而没有Python在某些时候插入引号(将其作为字符串处理)。
如何从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的第三个参数。
Py_BuildValue("{s:O}", "stdout", content_obj)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.