导航:首页 > 编程语言 > 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相关的资料

热点内容
程序员开发团队可以怎么创业 浏览:925
设备共享服务器是什么意思 浏览:124
java符号类型 浏览:331
redis客户端java 浏览:214
javatn 浏览:278
应用宝哪里下载王卡免流量app 浏览:235
uv7代喷头加密与不加密 浏览:467
滚动指标源码查询 浏览:986
梦幻西游lua源码修改教程 浏览:937
androidphp环境 浏览:762
php前台页面 浏览:493
程序员hr怎么挽留 浏览:817
学习编程视频剪辑的书 浏览:170
安卓什么时候更新软件格式 浏览:978
三星920sc加密码 浏览:721
南航app在哪里 浏览:743
我的世界服务器菜单怎么做出来 浏览:366
马后炮编程视频 浏览:649
程序员上海郊区 浏览:351
哪里app可回收手机壳 浏览:680