LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 211|回复: 0

例子分析

[复制链接]
发表于 2024-1-15 09:56:09 | 显示全部楼层 |阅读模式

回到前面的例子,你应该明白下面的代码:

if (!PyArg_ParseTuple(args, "s", &command))
    return NULL;
如果在参数列表中检测到错误,它将返回 NULL (该值是返回对象指针的函数的错误提示),这取决于 PyArg_ParseTuple() 设置的异常。 在其他情况下参数的字符串值会被拷贝到局部变量 command。 这是一个指针赋值并且你不应该修改它所指向的字符串 (因此在标准 C 中,变量 command 应当被正确地声明为 const char *command)。

下一个语句使用UNIX系统函数 system() ,传递给他的参数是刚才从 PyArg_ParseTuple() 取出的:

sts = system(command);
我们的 spam.system() 函数必须以 Python 对象的形式返回 sts 的值。 这是通过使用函数 PyLong_FromLong() 完成的。

return PyLong_FromLong(sts);
在这种情况下,会返回一个整数对象,(这个对象会在Python堆里面管理)。

如果你有一个不返回有用参数的 C 函数(即返回 void 的函数),则对应的 Python 函数必须返回 None。 你必须使用这种写法(它是通过 Py_RETURN_NONE 宏来实现的)

Py_INCREF(Py_None);
return Py_None;
Py_None 是特殊 Python 对象 None 所对应的 C 名称。 它是一个真正的 Python 对象而不是 NULL 指针,如我们所见,后者在大多数上下文中都意味着“错误”。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表