c创建python虚拟机_Python C API的使用详解(一)

本文介绍了如何使用C语言初始化和退出Python虚拟机,以及如何利用Python C API进行数据类型转换。通过Py_Initialize()、Py_IsInitialized()、Py_Finalize()管理Python虚拟机,使用PyObject来操作Python对象,Py_BuildValue用于将C的基本数据类型转换为Python兼容的类型。
摘要由CSDN通过智能技术生成

简介

介绍一下Python虚拟机的初始化及退出,Python基本数据类型的对象创建以及C和Python之间的数据类型互相转换。

Python虚拟机的初始化及退出

初始化Python虚拟机需要调用Py_Initialize()来实现。

Py_IsInitialized()用于判断Python虚拟机初始化是否成功,True是成功,False是失败。

C/C++中调用Python之前必须先初始化虚拟机。

退出虚拟机的时候调用Py_Finalize()。

进程退出时要退出Python虚拟机。

实例:

#include

#include

using namespace std;

int main() {

// 初始化Python虚拟机

Py_Initialize();

// 判断Python虚拟机是否成功

if (Py_IsInitialized() == 0){

printf("fal to initialize Python\n");

return -1;

}

printf("server start\n");

// 退出Python虚拟机

Py_Finalize();

return 0;

}

编译方式及参数:

下面是Python2的编译方式,Python3的话,只需要将Python的库路径改成Python3的即可

g++ -I/usr/include/python2.7 -c main.cpp

g++ -o main main.o -L/usr/local/lib -lpython2.7 -lrt -lpthread -lutil -ldl

PyObject

Python的所有对象类型都是此类型的扩展。 这是一种类型,它包含Python将对象的指针视为对象所需的信息。 在正常的“发布”版本中,它仅包含对象的引用计数和指向相应类型对象的指针。 实际上没有任何东西被声明为PyObject,但是每个指向Python对象的指针都可以转换为PyObject *。 必须使用宏Py_REFCNT和Py_TYPE来访问成员。

宏描述,不包括全部

Py_TYPE: 获取Python对象的数据类型

Py_REFCNT: Python的引用计数器

Py_SIZE: 获取Python数据大小

还有很多...

Py_BuildValue

可以使用其将C的所有基本数据类型转换成Python可访问的数据类型。

标识符介绍:

s(str或None)[char *]

使用'utf-8'编码将以null结尾的C字符串转换为Python str对象。如果C字符串指针为NULL,则表示None。

s#(str或None)[char *,int]

使用'utf-8'编码将C字符串及其长度转换为Python str对象。如果C字符串指针为NULL,则忽略长度返回None。

y(字节)[char *]

这会将C字符串转换为Python字节对象。如果C字符串指针为NULL,则返回None。

y#(字节)[char *,int]

这会将C字符串及其长度转换为Python对象。如果C字符串指针为NULL,则返回None。

z(str或None)[

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值