项目记录 -- python调用回调函数
2014-07-07 18:27
204 查看
C源文件:
上面代码中:value定义的是数组char value[MAXNAMELEN];,我采用的方法如下:
采用上述方法时,当运行到libzfs.zpool_get_prop时,直接显示为None
正确的方法为:
采用create_string_buffer才能正确显示
执行命令:print(type(value))
print(dir(value))
显示如下:
<class 'ctypes.c_char_Array_256'>
['__class__', '__ctypes_from_outparam__', '__delattr__', '__delitem__', '__dict__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__le__', '__len__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__setstate__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_b_base_', '_b_needsfree_', '_length_', '_objects', '_type_', 'raw', 'value']
static int get_callback(zpool_handle_t *zhp, void *data) { zprop_get_cbdata_t *cbp = (zprop_get_cbdata_t *)data; char value[MAXNAMELEN]; zprop_source_t srctype; zprop_list_t *pl; for (pl = cbp->cb_proplist; pl != NULL; pl = pl->pl_next) { /* * Skip the special fake placeholder. This will also skip * over the name property when 'all' is specified. */ if (pl->pl_prop == ZPOOL_PROP_NAME && pl == cbp->cb_proplist) continue; if (pl->pl_prop == ZPROP_INVAL && (zpool_prop_feature(pl->pl_user_prop) || zpool_prop_unsupported(pl->pl_user_prop))) { srctype = ZPROP_SRC_LOCAL; if (zpool_prop_get_feature(zhp, pl->pl_user_prop, value, sizeof (value)) == 0) { zprop_print_one_property(zpool_get_name(zhp), cbp, pl->pl_user_prop, value, srctype, NULL, NULL); } } else { if (zpool_get_prop(zhp, pl->pl_prop, value, sizeof (value), &srctype) != 0) continue; zprop_print_one_property(zpool_get_name(zhp), cbp, zpool_prop_to_name(pl->pl_prop), value, srctype, NULL, NULL); } } return (0); } 来源 -- illumos/usr/src/cmd/zpool/zpool_main.c
上面代码中:value定义的是数组char value[MAXNAMELEN];,我采用的方法如下:
value = c_char * 256 libzfs.zpool_get_prop(zhp, prop, value, 256, byref(srctype))
采用上述方法时,当运行到libzfs.zpool_get_prop时,直接显示为None
正确的方法为:
value = create_string_buffer(256) ret = libzfs.zpool_get_prop(zhp, prop, value, 256, byref(srctype))
采用create_string_buffer才能正确显示
执行命令:print(type(value))
print(dir(value))
显示如下:
<class 'ctypes.c_char_Array_256'>
['__class__', '__ctypes_from_outparam__', '__delattr__', '__delitem__', '__dict__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__le__', '__len__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__setstate__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_b_base_', '_b_needsfree_', '_length_', '_objects', '_type_', 'raw', 'value']
相关文章推荐
- c调用python记录
- python 搭建的服务器上面 运行项目出错的记录
- python如何调用C, 如何注册成C的回调函数(python后台程序常用方法)
- 实践项目五:python调用百度API实现自动检测翻译
- Python外部脚本调用Django项目Model表
- Python+Jpype 调用 Java 碰壁全记录
- python各类项目模块记录
- Python记录详细调用堆栈日志的方法
- Python记录详细调用堆栈日志的方法
- python项目中不同文件夹py源文件之间如何相互调用--Python import中相对路径的问题
- cocos2d-x 2.1.4 使用python 创建项目指令:记录
- [Python]记录详细调用堆栈的日志
- 项目记录 -- zfs get all [volume] python实现的数据构造
- Python调用c扩展记录——ctype
- C/C++/C#问题记录(一)VS2012编译调用dll项目找不到lib的workaround
- python 字符编码 调用其他程序 的一些问题记录
- 项目实现过程中遇到的问题记录(二)------------在Thread中使用CallBack并没有调用CallBack的返回
- python调用新浪微博API项目实践
- Python 函数调用性能记录
- 知乎Python小项目练习记录