我一直在网上搜索没有运气。我有以下 Python 代码:
class LED(Structure):
_fields_ = [
('color', c_char_p),
('id', c_uint32)
]
class LEDConfiguration(Structure):
_fields_ = [
('daemon_user', c_char_p),
('leds', POINTER(LED)),
('num_leds', c_uint32)
]
这是一个使用这些结构并返回 LEDConfiguration 的简化示例函数。
def parseLedConfiguration(path, board):
lc = LEDConfiguration()
for config in configs:
if( config.attributes['ID'].value.lstrip().rstrip() == board ):
lc.daemon_user = c_char_p('some_name')
leds = []
#Imagine this in a loop
ld = LED()
ld.color = c_char_p('red')
ld.id = int(0)
leds.append(ld)
#end imagined loop
lc.num_leds = len(leds)
lc.leds = (LED * len(leds))(*leds)
return lc
现在这是我正在使用的 C 代码(我已经删除了与设置 python/调用“parseLedConfiguration”函数/等有关的所有内容,但如果有帮助,我可以添加它)。
/*Calling the python function "parseLedConfiguration"
pValue is the returned "LEDConfiguration" python Structure*/
pValue = PyObject_CallObject(pFunc, pArgs);
Py_DECREF(pArgs);
if (pValue != NULL)
{
int i, num_leds;
PyObject *obj = PyObject_GetAttr(pValue, PyString_FromString("daemon_user"));
daemon_user = PyString_AsString(obj);
Py_DECREF(obj);
obj = PyObject_GetAttr(pValue, PyString_FromString("num_leds"));
num_leds = PyInt_AsLong(obj);
Py_DECREF(obj);
obj = PyObject_GetAttr(pValue, PyString_FromString("leds"));
PyObject_Print(obj, stdout, 0);
我的问题是弄清楚如何访问返回给最终“obj”的内容。“obj”上的“PyObject_Print”显示以下输出:
<ConfigurationParser.LP_LED object at 0x7f678a06fcb0>
我想进入一种可以访问该 LP_LED 对象的状态,就像我访问上面的“LEDConfiguration”对象一样。
编辑 1
我想另一个可能更重要的问题是,我的 python 代码是否正确?那是我应该如何将“结构”列表或数组存储在另一个“结构”中,以便可以从 Python C API 访问它?
谢谢!