下面是一個例子:
成都創新互聯公司網站建設公司,提供成都網站設計、做網站、成都外貿網站建設公司,網頁設計,建網站,PHP網站建設等專業做網站服務;可快速的進行網站開發網頁制作和功能擴展;專業做搜索引擎喜愛的網站,是專業的做網站團隊,希望更多企業前來合作!
首先是python的一個簡單函數
class Hello:
def __init__(self, x):
self.a = x
def print(self, x=None):
print(x)
def xprint():
print("hello world")
if __name__ == "__main__":
xprint()
h = Hello(5)
h.print()1
下面是C語言
#include python3.4m/Python.h
#include stdio.h
#include stdlib.h
#include string.h
int main()
{
Py_Initialize();
// 將當前目錄加入sys.path
PyRun_SimpleString("import sys");
PyRun_SimpleString("sys.path.append('./')");
// 導入hello.py模塊
PyObject *pmodule = PyImport_ImportModule("hello");
// 獲得函數xprint對象,并調用,輸出“hello world\n”
PyObject *pfunc = PyObject_GetAttrString(pmodule, "xprint");
PyObject_CallFunction(pfunc, NULL);
// 獲得類Hello并生成實例pinstance,并調用print成員函數,輸出“5 6\n”
PyObject *pclass = PyObject_GetAttrString(pmodule, "Hello");
PyObject *arg = Py_BuildValue("(i)", 5);
PyObject *pinstance = PyObject_Call(pclass, arg, NULL);
PyObject_CallMethod(pinstance, "print", "i", 6);
Py_Finalize();
return 0;
}
編譯命令如下:
gcc pyapi.c -lpython3.4m -o pyapi
在C/C++中調用了這個函數之后不是會返回一個PyObject對象嗎?那個對象就是一個List啊,然后使用PyList_Size()獲取它的大小,使用PyList_GetItem()去讀取其中的元素就ok了啊。
找下Python的C API Manual,里面這些函數的用法寫的很詳細的。
可以具體說一下是怎么調用的嗎,像我使用C/C++調用這個外部程序(例如Python程序)時,我是這么做的,通過命令行參數通信,給個模板,注意看我的注釋。
C的部分(用C++也行,不過不難,也不是重點):
#includestdlib.h
#includestdio.h
int main(){
char pic_dir[255],pic_dir[255],cmd[255];
printf("What is your pic_dir? (e.g. C:\\a.jpg)\n");
/*雖然我強烈認為命名上應該不用pic_dir而是用pic_path*/
scanf("%s",pic_dir);
printf("What is your pic_name?(e.g. b.jpg)\n");
scanf("%s",pic_name);
printf("so we are calling a python program to deal with those above, please wait...\n");
sprintf(cmd,"python process.py %s %s ",pic_dir,pic_name);
/*這里是一個關鍵點,python的運行目錄在你的PATH環境變量里有,如下圖最后一行*/
system(cmd);
return 0;
}
process.py:(部分內容,主要是在process方法定義后面加一點東西)
def process(pic_dir,pic_name):
...#(這里的語句體(suite)不用改, 加上后面兩句就行)
from sys import argv
process(argv[1],argv[2])
OK完成
C語言不能直接調用Python源程序,但是可以通過進程調用來實現。
分享標題:c調python函數 c++怎么調用python函數
文章URL:http://vcdvsql.cn/article40/hhhieo.html
成都網站建設公司_創新互聯,為您提供網站營銷、服務器托管、Google、網站改版、自適應網站、品牌網站建設
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯