iOS 工程中調(diào)用Python方法

由于公司開發(fā)的產(chǎn)品需要在原生app中調(diào)用Python去抓取數(shù)據(jù),于是在網(wǎng)上找了很久資料,發(fā)現(xiàn)還是比較少的。發(fā)現(xiàn)比較有用的如下:
使用Python開發(fā)iOS程序
Python官網(wǎng)
第一篇文章讓我找了思路,具體原理就是在App中安裝Python解釋器,還好有大牛在下面是編譯解釋的腳本地址。
https://github.com/pybee/Python-iOS-support
也可以去下載編譯好的版本,我是懶人一個(gè)就去下載編譯好的,下面為下載地址
https://github.com/pybee/Python-iOS-support/releases

52EB8D50-7925-4EA7-AB8D-A1337AECB0E5.png

下載下來解壓為OpenSSL.frameworkPython.framework將其拖入Xcode工程中,另外將PythonEnvironment.bundle資源包也拖入工程中
一、如何在Xcode中執(zhí)行Python方法
1、首先設(shè)置Python的Home路徑

  Py_SetPythonHome(pythonHome);

942EA94D-F387-471A-BE5A-2B55730A2AB9.png

注意pythonHome的路徑為PythonEnvironment.bundle中的Resources路徑

2、初始化解釋器并執(zhí)行簡單的python語句

 Py_Initialize();
 PyRun_SimpleString("print('hello world')");

3、釋放解釋器

 Py_Finalize();

上面簡單的步驟就能調(diào)用Python方法了。
二、如何調(diào)用.py中類的實(shí)例方法
1、首先將.py文件剪切到xxxx/PythonEnvironment.bundle/Python.framework/Resources/lib/python3.4/site-packages
注意這個(gè)路徑需要導(dǎo)入這個(gè)PythonEnvironment.bundle中。
2、設(shè)置路徑和初始化解釋器,導(dǎo)入模塊找到類并實(shí)例化。

  PyObject * pModule =PyImport_ImportModule(fileName);//導(dǎo)入模塊
  PyObject *pyClass = PyObject_GetAttrString(pModule, [className UTF8String]); //獲取類
  PyObject *pyInstance = PyInstanceMethod_New(pyClass); //創(chuàng)建實(shí)例

3、執(zhí)行方法

    PyObject *result = NULL;
    result = PyObject_CallMethod(pyInstance, [methodName UTF8String], "(N,s)",pyClass,[paramterJsonString UTF8String]);
  // 解析數(shù)據(jù)
    char * resultCString = NULL;
    PyArg_Parse(result, "s", &resultCString); //將python類型的返回值轉(zhuǎn)換為c

上面PyObject_CallMethod中第一個(gè)參數(shù)為實(shí)例對象,第二參數(shù)為方法名,第三個(gè)格式化參數(shù),PyArg_Parse方便是把方法的結(jié)果轉(zhuǎn)為c語音字符串。

總結(jié):

其實(shí)在iOS中調(diào)用Python不是很難,主要是一開始的時(shí)候不知道如何設(shè)置Home路徑,還是就是需要將.py文件剪切到相對應(yīng)得路徑中去,要不使用PyImport_ImportModule方法一直導(dǎo)入不了module。最后放上對其封裝和測試的Demo地址。注意OpenSSL.frameworkPython.framework太大我就沒上傳了,下載下來直接運(yùn)行不了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容