《扩展和嵌入python解释器》1.3 回到例子中
来源:互联网 发布:淘宝电子面单怎么充值 编辑:程序博客网 时间:2024/04/28 05:18
1.3 回到例子
根据是否由PyArg_ParseTuple()函数设置了异常,如果在参数列表中检测到错误(异常被设置), 则函数返回NULL(函数返回对象指针的错误标识)。否则,参数的字符串值已经被拷贝到本地变量command中了。这是一个分配的指针,你不应修改指针指向的字符串 (就象在标准C中,变量command应该正确地声明为"const char *command ")。
Py_None是Python空对象的C名称。这是一个典型的Python对象而不只是一个NULL 指针,正如我们已经看到的,在大多数情况下,Py_None表示错误。
回到我们的例子函数中,现在,你应该能够理解下面这些语句:
if (!PyArg_ParseTuple(args, "s", &command)) return NULL;
根据是否由PyArg_ParseTuple()函数设置了异常,如果在参数列表中检测到错误(异常被设置), 则函数返回NULL(函数返回对象指针的错误标识)。否则,参数的字符串值已经被拷贝到本地变量command中了。这是一个分配的指针,你不应修改指针指向的字符串 (就象在标准C中,变量command应该正确地声明为"const char *command ")。
下面的语句调用了UNIX函数system(),传递给函数我们从PyArg_ParseTuple() 得到的字符串
sts = system(command);
我们的spam.system() 函数必须把sts的值作为Python对象返回。这可以通过Py_BuildValue()函数实现, 此函数有点象PyArg_ParseTuple()函数的反函数,这个函数带一个格式化字符串和任意个C值,并且返回一个Python对象。Py_BuildValue() 函数的详细信息后面给出。
return Py_BuildValue("i", sts);
在本例中,它返回一个整数对象(的确,即使整数也是Python堆上的对象); 如果你有一个C函数返回无用参数(即函数返回void),相应的Python函数必须返回None
。你应习惯这么做(由Py_RETURN_NONE宏实现):
Py_INCREF(Py_None); return Py_None;
Py_None是Python空对象的C名称。这是一个典型的Python对象而不只是一个NULL 指针,正如我们已经看到的,在大多数情况下,Py_None表示错误。
- 《扩展和嵌入python解释器》1.3 回到例子中
- 扩展和嵌入python解释器 - 摘要
- 《扩展和嵌入python解释器》1.1 一个简单的例子
- 《扩展和嵌入python解释器》1.7 在扩展函数中提取参数
- 《扩展和嵌入python解释器》1.6 从C中调用Python函数
- 《扩展和嵌入python解释器》1.5 编译和连接
- 《扩展和嵌入python解释器》1.9 构造任意值
- 《扩展和嵌入python解释器》10.1. 引用计数
- 《扩展和嵌入python解释器》2. 定义新类型
- 《扩展和嵌入python解释器》1. 用C或C++扩展Python
- 《扩展和嵌入python解释器》1.11 用C++写Python扩展(Writing Extensions in C++)
- 《扩展和嵌入python解释器》1.8 扩展函数的关键字参数
- 《扩展和嵌入python解释器》1.12 为扩展模块提供C API
- 扩展和嵌入Python 解释器(Extending and Embedding the Python Interpreter)--摘要
- 扩展和嵌入Python 解释器(Extending and Embedding the Python Interpreter)--第一章
- 《扩展和嵌入python解释器》1.10.1 Python中的引用计数
- 《扩展和嵌入python解释器》1.2 Intermezzo: 错误和异常
- 《扩展和嵌入python解释器》1.4 模块方法表和初始化函数
- 【一个很牛的婆婆写给媳妇的一封信】vs【一个很牛的媳妇写给婆婆的一封信】
- VC笔记
- Oscache的强行更新机制
- OSD(On Screen Display)简介
- SQL SERVER 数据类型详解
- 《扩展和嵌入python解释器》1.3 回到例子中
- 一个“笑话”引发的思考
- 毕业
- 浮点数表示及其实现.
- [手持设备]模拟器完成,实机调试成功!
- 按钮事件之我见
- 基于互联网的项目管理——Microsoft Project Central 及其应用
- FLASH场景的片头loading
- 游戏服务器端的开发