在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
最近在做一个项目,开发环境用的是QT c++。项目中使用amazon云服务,调研发现有一个Amazon云的python接口。就有了标题中的问题,需要用C++来调用python脚本。 下面是一个c++调用python的小例子。我先贴出代码,然后在详细介绍。 # -*- coding: cp936 -*- #定义hello函数,这个函数的功能是输出“hello world!” def hello(): print("hello world!")
上面就是我们一会要用C++调用python脚本,你没看错,只有两行,是不是很简单,这也是我们为什么要调用Amazon云的python接口的原因。 #include <QCoreApplication> #include <Python.h> #include <iostream> using namespace std; int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); //初始化python模块 Py_Initialize(); if ( !Py_IsInitialized() ) { return -1; } //导入test.py模块 PyObject* pModule = PyImport_ImportModule("test"); if (!pModule) { printf("Cant open python file!\n"); return -1; } //获取test模块中的hello函数 PyObject* pFunhello= PyObject_GetAttrString(pModule,"hello"); //注释掉的这部分是另一种获得test模块中的hello函数的方法 // PyObject* pDict = PyModule_GetDict(pModule); // if (!pDict) { // printf("Cant find dictionary.\n"); // return -1; // } // PyObject* pFunhello = PyDict_GetItemString(pDict, "hello"); if(!pFunhello){ cout<<"Get function hello failed"<<endl; return -1; } //调用hello函数 PyObject_CallFunction(pFunhello,NULL); //结束,释放python Py_Finalize(); return a.exec(); } 上面是C++调用python的代码。要想具体了解这些Py**函数,可以去看看python手册或者其他网络资源,我看的是这个http://segmentfault.com/a/1190000000531613 这个测试工程的结构如下图所示:
在运行之前需要进行配置,注意到main.cpp包含了一个Python.h的头文件,这是调用python脚本必须的,同时我们还要配置这个工程的.pro文件,将python的include和lib包含进来。 配置如下所示: 这样就可以调用python代码了吗? 来看看我们的运行结果: 可以看到,没有打开python文件,为什么呢? 这是因为生成的exe文件和tests.py文件不在同一个文件夹里,只要手动将test.py拷贝到exe文件同级目录下即可。 然后我们再来试下: 成功了! 就到这里了,有问题的地方欢迎指出。 |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论