當前位置:首頁 » 編程語言 » c調用python

c調用python

發布時間: 2022-01-10 11:09:35

⑴ c++調用python

你看看是不是用64位的python庫去link你的32位的程序了

c語言程序如何調用python程序

下面是一個例子:
首先是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 *pmole = PyImport_ImportMole("hello");
// 獲得函數xprint對象,並調用,輸出「hello world\n」
PyObject *pfunc = PyObject_GetAttrString(pmole, "xprint");
PyObject_CallFunction(pfunc, NULL);
// 獲得類Hello並生成實例pinstance,並調用print成員函數,輸出「5 6\n」
PyObject *pclass = PyObject_GetAttrString(pmole, "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

linux C語言調用Python腳本

比如什麼變數呢?
可以用命令行參數啊
system("python xxx.py arg1 arg2 ...")
如果讓python接收參數自己查一下

⑷ C調用Python模塊傳參的問題 [

Py_BuildValue()函數可以和PyArg_ParseTuple()函數一樣識別一系列的格式串,但是輸入參數只能是值,而不能是指針。參考官方文檔https://docs.python.org/2/c-api/arg.html?highlight=py_buildvalue#Py_BuildValue

⑸ c語言能不能調用python庫函數

將event.py目錄加入到system path中

1
2
3

import sys
sys.path.append("/Users/songrao/Library/Application Support/Sublime Text 3/Packages/User/")
from event import printme

⑹ 如何在C語言中調用python函數

C語言不能直接調用Python源程序,但是可以通過進程調用來實現。

⑺ C中調用Python函數,找不到模塊

是因為你的模塊的路徑不對,必須先指定路徑 PyObject *sys = PyImport_ImportMole("sys"); PyObject *path = PyObject_GetAttrString(sys, "path"); PyList_Append(path, PyString_FromString(""));C中調用Python函數,找不到模塊

⑻ C調用Python一個運行時間長的函數,如何實時

如果要在test.py中調用腳本func.py腳本

首先,兩個腳本文件要放在pythonpath下,其次在test.py腳本的開頭寫上import func,這樣就可以直接調用func中的函數方法了。

⑼ 如何在linux下用c調用過python

#include <string>
#include <map>
#include <Python.h>

typedef std::map<std::string,PyObject*> pyMoleMap;
typedef pyMoleMap::iterator pyMoleMapIter;

class PyOperBase
{
public:

static int initPython() //must running at the main thread

{

if(m_isInit == true)

return true;

Py_Initialize();

if(!Py_IsInitialized())

{

return false;

}

//Need to specify the current path path only Linux

#ifdef LINUX
PyRun_SimpleString("import sys");
PyRun_SimpleString("sys.path.append('./')");

#endif

//PyEval_InitThreads();

//PyEval_ReleaseThread(PyThreadState_Get());

m_isInit = true;

return true;

}

static int releasePython()

{

if(!m_isInit) return false;

pyMoleMapIter iter;

PyObject* pMole = NULL;

for(iter = m_MoleMap.begin(); iter != m_MoleMap.end(); iter++)

{

pMole = iter->second;

Py_DECREF(pMole);

}

m_MoleMap.clear();

//PyGILState_Ensure();

Py_Finalize();

m_isInit = false;

return true;

}

static bool getInitStatus()

{

return m_isInit;

}

static int getModleDictByScriptName(std::string& script, PyObject** object)

{

if(m_isInit != true)

return false;

PyObject *pName = NULL, *pMole = NULL;

pyMoleMapIter iter = m_MoleMap.find(script);

if(iter != m_MoleMap.end())

{

pMole = iter->second;

if(!getDictByModle(pMole,object))

return false;

return true;

}

pName = PyString_FromString(script.c_str());

pMole = PyImport_Import(pName);

Py_DECREF(pName);

if(!pMole)

{

return false;

}

if(!getDictByModle(pMole,object))

{

Py_DECREF(pMole);

return false;

}

m_MoleMap.insert(std::pair<std::string,PyObject*>(script,pMole));

return true;

}

private:

static int getDictByModle(PyObject* pModle, PyObject** ppDict)

{

PyObject *pDict = NULL;

pDict = PyMole_GetDict(pModle);

if(!pDict)

{

return false;

}

*ppDict = pDict;

return true;

}

static bool m_isInit;

static pyMoleMap m_MoleMap;
};

class PyThreadLock
{
public:
PyThreadLock(void)
{
state = PyGILState_Ensure( );
}

~PyThreadLock(void)
{
PyGILState_Release( state );
}
private:
PyGILState_STATE state;
};

.cpp文件如下

#include "XPS2SVG_py.h"
bool PyOperBase::m_isInit = false;
pyMoleMap PyOperBase::m_MoleMap;

我linux下環境變數配置好了python路徑,所以直接#include <Python.h>了
以上代碼在windows下跑沒問題。
但到linux下,pMole = PyImport_Import(pName);會返回空
應該是沒找到pName標識的模塊,但是pName標識標識的模塊文件就在可執行文件的當前目錄下

熱點內容
scala反編譯工具 發布:2024-12-24 21:03:26 瀏覽:766
安卓長按app怎麼刪除不了 發布:2024-12-24 20:57:44 瀏覽:714
加減乘除java 發布:2024-12-24 20:51:56 瀏覽:427
linuxusb攝像頭 發布:2024-12-24 20:51:39 瀏覽:878
ftp是怎麼安裝的 發布:2024-12-24 20:50:35 瀏覽:699
國際站伺服器是什麼 發布:2024-12-24 20:49:43 瀏覽:354
win7訪問win10無許可權 發布:2024-12-24 20:39:59 瀏覽:63
微信投訴無法上傳照片 發布:2024-12-24 20:39:55 瀏覽:89
ug編程過切 發布:2024-12-24 20:34:43 瀏覽:650
非凡任務電影ftp 發布:2024-12-24 20:30:21 瀏覽:243