run a simple python script in ios

前端 未结 1 1769
一向
一向 2021-01-03 16:08

I want to run a python script on ios. I don\'t want to write the whole Application in Python just a little part of it.

I have tried to understand PyObjC but it is

1条回答
  •  北海茫月
    2021-01-03 16:45

    Here is an example of calling a function defined in myModule. The equivient python would be:

    import myModule
    pValue = myModule.doSomething()
    print pValue
    

    In Objective-c:

    #include 
    
    - (void)example {
    
        PyObject *pName, *pModule, *pDict, *pFunc, *pArgs, *pValue;
        NSString *nsString;
    
        // Initialize the Python Interpreter
        Py_Initialize();
    
        // Build the name object
        pName = PyString_FromString("myModule");
    
        // Load the module object
        pModule = PyImport_Import(pName);
    
        // pDict is a borrowed reference 
        pDict = PyModule_GetDict(pModule);
    
        // pFunc is also a borrowed reference 
        pFunc = PyDict_GetItemString(pDict, "doSomething");
    
        if (PyCallable_Check(pFunc)) {
            pValue = PyObject_CallObject(pFunc, NULL);
            if (pValue != NULL) {
                if (PyObject_IsInstance(pValue, (PyObject *)&PyUnicode_Type)) {
                        nsString = [NSString stringWithCharacters:((PyUnicodeObject *)pValue)->str length:((PyUnicodeObject *) pValue)->length];
                } else if (PyObject_IsInstance(pValue, (PyObject *)&PyBytes_Type)) {
                        nsString = [NSString stringWithUTF8String:((PyBytesObject *)pValue)->ob_sval];
                } else {
                        /* Handle a return value that is neither a PyUnicode_Type nor a PyBytes_Type */
                }
                Py_XDECREF(pValue);
            } else {
                PyErr_Print();
            }
        } else {
            PyErr_Print();
        }
    
        // Clean up
        Py_XDECREF(pModule);
        Py_XDECREF(pName);
    
        // Finish the Python Interpreter
        Py_Finalize();
    
        NSLog(@"%@", nsString);
    }
    

    For much more documentation check out: Extending and Embedding the Python Interpreter

    0 讨论(0)
提交回复
热议问题