C++嵌入python
把python的include/libs目录分别加到vc的include/lib directories中去。另外,由于python没有提供debug lib,体地说,就是没有提供python25_d.lib了。你可以自己编译python的源代码来得到python25_d.lib。所以,如果你想要在debug下运行程序的话,你要把pyconfig.h(在python25/include/目录下)的大概是在283行,把pragma comment(lib,"python32_d.lib")改成pragma comment(lib,"python32.lib"),让python都使用非debug lib.
#include<python/python.h> //包含头文件,在c++中嵌入python,这是必须的
int main()
{
//调用python之前的初始化操作
Py_Initialize();
PyObject * pModule = NULL;
PyObject * pFunc = NULL;
//import脚本
pModule =PyImport_ImportModule("gmail");
//从import的module中获取函数
pFunc = PyObject_GetAttrString(pModule, "Hello");
//调用PyEval_CallObject来执行你的函数
PyEval_CallObject(pFunc, NULL);
Py_Finalize();
return 0;
}
一个有一个参数的例子
python文件
#Filename test2.py
def Hello(s):
print "Hello, world!"
print s
cpp文件
#include <python.h>
int main()
{
Py_Initialize();
PyObject* pModule = NULL;
PyObject * pFunc = NULL;
PyObject * pArg = NULL;
pModule= PyImport_ImportModule("test2");
pFunc = PyObject_GetAttrString(pModule, "Hello");
pArg = Py_BuildValue("(s)", "functionwith argument");
PyEval_CallObject(pFunc,pArg);
Py_Finalize();
return0;
}
使用python与C++混合编程发送电子邮件:
//gmail.py
import smtplib
fromemail.mime.text import MIMEText
defSendEmail(str):
fromaddr = 'from @gmail.com'
toaddrs = 'to@163.com'
msg = MIMEText(str)
msg['Subject'] = 'I miss you'
msg['From'] = 'from@gmail.com'
msg['To'] = 'to@163.com'
# Credentials (if needed)
username = 'from'
password = 'password'
# The actual mail send
server = smtplib.SMTP('smtp.gmail.com:587')
server.starttls()
server.login(username,password)
server.sendmail(fromaddr, toaddrs,msg.as_string())
server.quit()
a = 'hacky.grey'
//main.cpp
#include<python/python.h> //包含头文件,在c++中嵌入python,这是必须的
int main()
{
//调用python之前的初始化操作
Py_Initialize();
PyObject * pModule = NULL;
PyObject * pFunc = NULL;
PyObject * pArg = NULL;
//import脚本
pModule =PyImport_ImportModule("gmail");
//从import的module中获取函数
pFunc = PyObject_GetAttrString(pModule, "SendEmail");
//构造一个字符串
pArg = Py_BuildValue("(s)", "You have done a good job!");//构造一个元组
//调用PyEval_CallObject来执行你的函数
PyEval_CallObject(pFunc, pArg);
Py_Finalize();
system("pause");
return 0;
}
另外发现在py文件中如果没有能够直接执行的语句会出错