你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> 可運行於IOS的Python解釋器

可運行於IOS的Python解釋器

編輯:IOS開發綜合

本文一個運行於iphone的python解釋器的例子,版本為python2.7,由於主要是為了說明如何初始化python解釋器,運行python腳本,例子中的界面比較簡單,一個輸入欄用於輸入python腳,一個輸出欄用於顯示運行的結果。Iphone支持Object-C和C++代碼混合編譯,可以直接使用C++代碼進行開發。

這裡Python解釋器基於cle開發,首先需要初始化cle,然後加載和初始化python解釋器,最後是獲取輸入的腳本並捕獲輸出結果。

1.創建工程

創建一個iphone的SingleView工程,添加需要的庫文件:SQLite3,iconv,starpy,python2.7,starcore 可運行於IOS的Python解釋器 可運行於IOS的Python解釋器

StarCoreBackgroundWorker* myworker = [StarCoreBackgroundWorker initStarCoreBackgroundWorker];
    [myworker RunAsync:^(id sender1, DoWorkEventArgs *e) {
        BackgroundWorker* worker = (BackgroundWorker*)sender1;
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *documentsDirectory = [paths objectAtIndex:0];
        const char* destDir = [documentsDirectory UTF8String];
        
        StarCore_Init((VS_CHAR *)destDir);
        
        NSString *respaths = [[NSBundle mainBundle] resourcePath];
        const VS_CHAR *res_cpath = [respaths UTF8String];
        VS_CHAR python_path[512];
        VS_CHAR python_home[512];
        sprintf(python_home,"%s/python",res_cpath);
        sprintf(python_path,"%s/python2.7.zip",res_cpath);
        VSCoreLib_InitPython((VS_CHAR*)python_home,(VS_CHAR *)python_path,NULL);
        
        VS_CORESIMPLECONTEXT Context;
        SRPInterface = VSCoreLib_InitSimple(&Context,"test","123",0,0,MsgCallBack,0,NULL);
        
        BasicSRPInterface = SRPInterface->GetBasicInterface();
        BasicSRPInterface->InitRaw("python", SRPInterface);
        
        void *python = SRPInterface ->ImportRawContext((VS_CHAR*)"python",(VS_CHAR*)"",false,NULL);
        
        //---enter msg loop
        SRPControl = BasicSRPInterface->GetSRPControlInterface();
        while(true){
            while(SRPControl->SRPDispatch(VS_FALSE) == VS_TRUE);
            [NSThread sleepForTimeInterval:0.01];
        }
    }
             userState:nil
       ProgressChanged:^(id sender1, ProgressChangedEventArgs *e) {
       }
    RunWorkerCompleted:^(id sender1, RunWorkerCompletedEventArgs *e) {
    }];


StarCoreBackgroundWorker是為移植性封裝的IOS的線程,詳細介紹見http://blog.csdn.net/srplab1/article/details/58251894


3.捕獲python腳本的輸出

為了捕獲python腳本的輸出結果,需要注冊CLE的回調函數,在回調函數中,將輸出結果顯示到文本框中。

回調函數:

static VS_UWORD MsgCallBack( VS_ULONG ServiceGroupID, VS_ULONG uMsg, VS_UWORD wParam, VS_UWORD lParam, VS_BOOL *IsProcessed, VS_UWORD Para )
{
    switch( uMsg ){
        case MSG_VSDISPMSG :
        case MSG_VSDISPLuaMSG :
            printf("[core]%s\n",(VS_CHAR *)wParam);
            break;
        case MSG_DISPMSG :
        case MSG_DISPLuaMSG :
            //--display message in text box
            [Control showPythonResult:[NSString stringWithUTF8String:(VS_CHAR*)wParam]];
        break;
    }
    return 0;
}


在初始化CLE時,指定回調函數

VS_CORESIMPLECONTEXT Context;
SRPInterface = VSCoreLib_InitSimple(&Context,"test","123",0,0,MsgCallBack,0,NULL);

4. 執行python腳本
4.1 編譯不執行

可以只編譯腳本,不執行,此時檢查腳本中的語法錯誤。編譯腳本需要調用CLE的函數PreCompile。該函數返回bool值和錯誤信息,如果返回true,則成功編譯;如果返回false, 並且錯誤信息為空,表示輸入腳本不完整;否則錯誤信息中為返回的編譯錯誤。

SRPControl->SRPLock();
    VS_CHAR *ErrorInfo;
    const VS_CHAR *str = [val UTF8String];
    VS_BOOL Result = BasicSRPInterface->PreCompile("python", str, strlen(str), NULL, &ErrorInfo);
    if( Result == VS_TRUE )
        self.textBlock1.text = @"success";
    else{
        if( ErrorInfo == NULL )
            self.textBlock1.text = @"More Input";
        else
            self.textBlock1.text = [NSString stringWithUTF8String:ErrorInfo];
    }
    SRPControl->SRPUnLock();

4.2 直接執行腳本


調用CLE的函數_RunScript執行python腳本。腳本的輸出會被之前設置的回調函數捕獲,顯示到輸出窗口中。

    SRPControl->SRPLock();
    const VS_CHAR *str = [val UTF8String];
    SRPInterface->DoBuffer("python", str, strlen(str), NULL, NULL, NULL, VS_TRUE);
    SRPControl->SRPUnLock();
5. 結束語

本例子實現了一個可運行於iphone平台的python解釋器,代碼非常簡單。可以參考本文中的方法,在iphone應用中使用python腳本語言。編譯運行本文中的例子需要CLE(http://www.srplab.com/data/starcore_for_ios.2.5.1.tar.gz),下載之後解壓,與例子放在統一目錄,如下:

可運行於IOS的Python解釋器以上就是可運行於IOS的Python解釋器的全文介紹,希望對您學習和使用ios應用開發有所幫助.

【可運行於IOS的Python解釋器】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved