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,這是必須的</p><p>int main()<br />{<br /> //調用python之前的初始化操作<br /> Py_Initialize();</p><p> PyObject * pModule = NULL;<br /> PyObject * pFunc = NULL;</p><p> //import指令碼<br /> pModule =PyImport_ImportModule("gmail");</p><p> //從import的module中擷取函數<br /> pFunc = PyObject_GetAttrString(pModule, "Hello");</p><p> //調用PyEval_CallObject來執行你的函數<br /> PyEval_CallObject(pFunc, NULL);</p><p> Py_Finalize();</p><p> return 0;<br />}<br />
一個有一個參數的例子
python檔案
#Filename test2.py<br />def Hello(s):<br /> print "Hello, world!"<br /> print s
cpp檔案
#include <python.h><br />int main()<br />{<br /> Py_Initialize();<br /> PyObject* pModule = NULL;<br /> PyObject * pFunc = NULL;<br /> PyObject * pArg = NULL;<br /> pModule= PyImport_ImportModule("test2");<br /> pFunc = PyObject_GetAttrString(pModule, "Hello");<br /> pArg = Py_BuildValue("(s)", "functionwith argument");<br /> PyEval_CallObject(pFunc,pArg);<br /> Py_Finalize();<br /> return0;<br />}
使用python與C++混合編程寄送電子郵件:
//gmail.py<br />import smtplib<br />fromemail.mime.text import MIMEText</p><p>defSendEmail(str):<br /> fromaddr = 'from @gmail.com'<br /> toaddrs = 'to@163.com'<br /> msg = MIMEText(str)<br /> msg['Subject'] = 'I miss you'<br /> msg['From'] = 'from@gmail.com'<br /> msg['To'] = 'to@163.com'<br /> # Credentials (if needed)<br /> username = 'from'<br /> password = 'password'<br /> # The actual mail send<br /> server = smtplib.SMTP('smtp.gmail.com:587')<br /> server.starttls()<br /> server.login(username,password)<br /> server.sendmail(fromaddr, toaddrs,msg.as_string())<br /> server.quit()</p><p>a = 'hacky.grey'
//main.cpp<br />#include<python/python.h> //包含標頭檔,在c++中嵌入python,這是必須的</p><p>int main()<br />{<br /> //調用python之前的初始化操作<br /> Py_Initialize();</p><p> PyObject * pModule = NULL;<br /> PyObject * pFunc = NULL;<br /> PyObject * pArg = NULL;</p><p> //import指令碼<br /> pModule =PyImport_ImportModule("gmail");</p><p> //從import的module中擷取函數<br /> pFunc = PyObject_GetAttrString(pModule, "SendEmail");</p><p> //構造一個字串<br /> pArg = Py_BuildValue("(s)", "You have done a good job!");//構造一個元組</p><p> //調用PyEval_CallObject來執行你的函數<br /> PyEval_CallObject(pFunc, pArg);</p><p> Py_Finalize();</p><p> system("pause");</p><p> return 0;<br />}
另外發現在py檔案中如果沒有能夠直接執行的語句會出錯