国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Embedding Python modules into C applications.

youkede / 2722人閱讀

In official Doc. of Python 3, there is a short introduction to embedding Python in another application like C/C++ (seeEmbedding Python in Another Application).

The common procedure is as follows,

write prototype C/C++ code and Python module codes.
Note that in the Python codes conventions of python 2 & 3 can not be mixed together, which may cause segfault when running.

call.c

#include 

int
main(int argc, char *argv[])
{
    PyObject *pName, *pModule, *pDict, *pFunc;
    PyObject *pArgs, *pValue;
    int i;

    if (argc < 3) {
        fprintf(stderr,"Usage: call pythonfile funcname [args]
");
        return 1;
    }

    Py_Initialize();
    pName = PyUnicode_FromString(argv[1]);
    /* Error checking of pName left out */

    pModule = PyImport_Import(pName);
    Py_DECREF(pName);

    if (pModule != NULL) {
        pFunc = PyObject_GetAttrString(pModule, argv[2]);
        /* pFunc is a new reference */

        if (pFunc && PyCallable_Check(pFunc)) {
            pArgs = PyTuple_New(argc - 3);
            for (i = 0; i < argc - 3; ++i) {
                pValue = PyLong_FromLong(atoi(argv[i + 3]));
                if (!pValue) {
                    Py_DECREF(pArgs);
                    Py_DECREF(pModule);
                    fprintf(stderr, "Cannot convert argument
");
                    return 1;
                }
                /* pValue reference stolen here: */
                PyTuple_SetItem(pArgs, i, pValue);
            }
            pValue = PyObject_CallObject(pFunc, pArgs);
            Py_DECREF(pArgs);
            if (pValue != NULL) {
                printf("Result of call: %ld
", PyLong_AsLong(pValue));
                Py_DECREF(pValue);
            }
            else {
                Py_DECREF(pFunc);
                Py_DECREF(pModule);
                PyErr_Print();
                fprintf(stderr,"Call failed
");
                return 1;
            }
        }
        else {
            if (PyErr_Occurred())
                PyErr_Print();
            fprintf(stderr, "Cannot find function "%s"
", argv[2]);
        }
        Py_XDECREF(pFunc);
        Py_DECREF(pModule);
    }
    else {
        PyErr_Print();
        fprintf(stderr, "Failed to load "%s"
", argv[1]);
        return 1;
    }
    Py_Finalize();
    return 0;
}

multiply.py

def multiply(a,b):
    print("Will compute", a, "times", b)
    c = 0
    for i in range(0, a):
        c = c + b
    return c

For a single C code, just build like

g++ call.c -o call `python3-config --cflags` `python3-config --ldflags`

This can be written as a shell like build.sh.
3. To run the code, write a shell named run.sh,

PYTHONPATH=. ./call multiply multiply 3 2

Here call is the main code, the two multiplys are the module and function names, respectively.
When running, this code gives,

Will compute 3 times 2
Result of call: 6

Note if no PYTHONPATH=. statement in front of the run command, there will be errors like ImportError: No module named multiply.

Someone suggested to add into the .py file

import sys
sys.path.insert(0, "./path/to/your/modules/")

I tested but not helpful.
BTW, the system path can be checked by

import sys
print(sys.path)

Useful commands in Python 3 are:

PyObject *exc_type = NULL, *exc_value = NULL, *exc_tb = NULL;
PyErr_Fetch(&exc_type, &exc_value, &exc_tb);
PyObject* str_exc_type = PyObject_Repr(exc_type); //Now a unicode
object
PyObject* pyStr = PyUnicode_AsEncodedString(str_exc_type, "utf-8",
"Error ~");
const char *strExcType = PyBytes_AS_STRING(pyStr);
Py_XDECREF(str_exc_type);
Py_XDECREF(pyStr);

Py_XDECREF(exc_type);
Py_XDECREF(exc_value);
Py_XDECREF(exc_tb); 

Other useful tutorials are
Python嵌入C/C++ (Python核心編程)
C++中嵌入Python調用
Embedding Python in C/C++: Part I
Embedding Python in C/C++: Part II

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/45388.html

相關文章

  • Awesome Python II

    摘要: Caching Libraries for caching data. Beaker - A library for caching and sessions for use with web applications and stand-alone Python scripts and applications. dogpile.cache - dogpile.cache...

    lx1036 評論0 收藏0
  • Awesome Python

    摘要:漢字拼音 Awesome Python A curated list of awesome Python frameworks, libraries and software. Inspired by awesome-php. Awesome Python Environment Management Package Management Package Repositorie...

    fizz 評論0 收藏0
  • TensorFlow Wide And Deep 模型詳解與應用

    摘要:我們先看看的初始化函數的完整定義,看構造一個模型可以輸入哪些參數我們可以將類的構造函數中的參數分為以下幾組基礎參數我們訓練的模型存放到指定的目錄中。看完模型的構造函數后,我們大概知道和端的模型各對應什么樣的模型,模型需要輸入什么樣的參數。 Wide and deep 模型是 TensorFlow 在 2016 年 6 月左右發布的一類用于分類和回歸的模型,并應用到了 Google Play ...

    opengps 評論0 收藏0
  • NLP教程:教你如何自動生成對聯

    摘要:本項目使用網絡上收集的對聯數據集地址作為訓練數據,運用注意力機制網絡完成了根據上聯對下聯的任務。這種方式在一定程度上降低了輸出對位置的敏感性。而機制正是為了彌補這一缺陷而設計的。該類中有兩個方法,分別在訓練和預測時應用。 桃符早易朱紅紙,楊柳輕搖翡翠群 ——FlyAI Couplets 體驗對對聯Demo: https://www.flyai.com/couplets s...

    Gu_Yan 評論0 收藏0
  • NLP教程:教你如何自動生成對聯

    摘要:本項目使用網絡上收集的對聯數據集地址作為訓練數據,運用注意力機制網絡完成了根據上聯對下聯的任務。這種方式在一定程度上降低了輸出對位置的敏感性。而機制正是為了彌補這一缺陷而設計的。該類中有兩個方法,分別在訓練和預測時應用。 桃符早易朱紅紙,楊柳輕搖翡翠群 ——FlyAI Couplets 體驗對對聯Demo: https://www.flyai.com/couplets s...

    Dr_Noooo 評論0 收藏0

發表評論

0條評論

youkede

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<