導航:首頁 > 編程語言 > c調用python

c調用python

發布時間:2022-01-18 06:45:11

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

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

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

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

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

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

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

4. 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

5. linux C語言調用Python腳本

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

6. c語言調用python有哪些好處

python是腳本語言,簡潔,易用,可以幫助你寫一些很方便的小程序,庫也豐富,不需要c那麼大規模復雜,所以,有些東西交給腳本語言做,速度快,花費時間少

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

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

8. 如何在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標識標識的模塊文件就在可執行文件的當前目錄下

9. 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相關的資料

熱點內容
加密鎖的售後 瀏覽:268
linux登不上去 瀏覽:729
聯想伺服器休眠後如何喚醒 瀏覽:111
四川話女孩學習編程 瀏覽:322
編譯原理文法區分 瀏覽:1001
教師可以做程序員嘛 瀏覽:637
終結戰場安卓國際服怎麼下載 瀏覽:155
現在的高端伺服器屬於什麼 瀏覽:810
企業銀行解壓流程 瀏覽:447
用app壓縮文件 瀏覽:227
柱子正負零加密區 瀏覽:322
車輛貸款交完要去4s店解壓 瀏覽:65
電腦可以運行plc編程嗎 瀏覽:594
下載app的怎麼連不上 瀏覽:765
程序員做量化交易有前途么 瀏覽:233
java程序編譯成本地exe 瀏覽:525
安卓手機有噪音怎麼回事 瀏覽:981
ios程序員飽和 瀏覽:7
51單片機控制pwm程序 瀏覽:299
汽車壓縮機串氣可以修么 瀏覽:633