python实现数据中心与c语言交互(怎么在Python和C++之间互相交互数据)

1.怎么在Python和C++之间互相交互数据

python取得javascript里面的值

复制代码代码如下:

import PyV8

with PyV8.JSContext() as env1:

env1.eval("""

var_i = 1;

var_f = 1.0;

var_s = "test";

var_b = true;

""")

vars = env1.locals

var_i = vars.var_i

print var_i

javascript取得python里面的值

复制代码代码如下:

import PyV8

with PyV8.JSContext() as env1:

env1.securityToken = "foo"

env1.locals.prop = 3

print int(env1.eval("prop"))

python和javascript里面的函数交互

python调用javascript里面的函数python调用func就可以使用js里面的function函数了

复制代码代码如下:

import PyV8

with PyV8.JSContext() as ctxt:

func = ctxt.eval("""

(function ()

{

function a()

{

return "abc";

}

return a();

})

""")

print func()

这样也可以

复制代码代码如下:

import PyV8

with PyV8.JSContext() as ctxt:

func = ctxt.eval("""

function a()

{

return "abc";

}

function c()

{

return "abc";

}

""")

a = ctxt.locals.a

print a()

2.怎样让Python脚本与C++程序互相调用

二、Python调用C/C++1、Python调用C动态链接库 Python调用C库比较简单,不经过任何封装打包成so,再使用python的ctypes调用即可。

(1)C语言文件:pycall.c[html] view plain copy /***gcc -o libpycall.so -shared -fPIC pycall.c*/ #include #include int foo(int a, int b) { printf("you input %d and %d\n", a, b); return a+b; } (2)gcc编译生成动态库libpycall.so:gcc -o libpycall.so -shared -fPIC pycall.c。使用g++编译生成C动态库的代码中的函数或者方法时,需要使用extern "C"来进行编译。

(3)Python调用动态库的文件:pycall.py[html] view plain copy import ctypes ll = ctypes.cdll.LoadLibrary lib = ll("./libpycall.so") lib.foo(1, 3) print '***finish***' (4)运行结果:2、Python调用C++(类)动态链接库 需要extern "C"来辅助,也就是说还是只能调用C函数,不能直接调用方法,但是能解析C++方法。不是用extern "C",构建后的动态链接库没有这些函数的符号表。

(1)C++类文件:pycallclass.cpp[html] view plain copy #include using namespace std; class TestLib { public: void display(); void display(int a); }; void TestLib::display() { cout<<"First display"<

可以用Python来写扩展,也可以用C和C++之类的编译型的语言来写扩展。Python在设计之初就考虑到要让模块的导入机制足够抽象。

抽象到让使用模块的代码无法了解到模块的具体实现细节。Python的可扩展性具有的优点:方便为语言增加新功能、具有可定制性、代码可以实现复用等。

为 Python 创建扩展需要三个主要的步骤:创建应用程序代码、利用样板来包装代码和编译与测试。(1)创建应用程序代码[html] view plain copy #include #include #include int fac(int n) { if (n < 2) return(1); /* 0! == 1! == 1 */ return (n)*fac(n-1); /* n! == n*(n-1)! */ } char *reverse(char *s) { register char t, /* tmp */ *p = s, /* fwd */ *q = (s + (strlen(s) - 1)); /* bwd */ while (p < q) /* if p < q */ { t = *p; /* swap & move ptrs */ *p++ = *q; *q-- = t; } return(s); } int main() { char s[BUFSIZ]; printf("4! == %d\n", fac(4)); printf("8! == %d\n", fac(8)); printf("12! == %d\n", fac(12)); strcpy(s, "abcdef"); printf("reversing 'abcdef', we get '%s'\n", \ reverse(s)); strcpy(s, "madam"); printf("reversing 'madam', we get '%s'\n", \ reverse(s)); return 0; } 上述代码中有两个函数,一个是递归求阶乘的函数fac();另一个reverse()函数实现了一个简单的字符串反转算法,其主要目的是修改传入的字符串,使其内容完全反转,但不需要申请内存后反着复制的方法。

(2)用样板来包装代码 接口的代码被称为“样板”代码,它是应用程序代码与Python解释器之间进行交互所必不可少的一部分。样板主要分为4步:a、包含Python的头文件;b、为每个模块的每一个函数增加一个型如PyObject* Module_func()的包装函数;c、为每个模块增加一个型如PyMethodDef ModuleMethods[]的数组;d、增加模块初始化函数void initModule()。

数据中心,交互,语言,python

3.怎么在Python和C++之间互相交互数据

python取得javascript里面的值

复制代码代码如下:

import PyV8

with PyV8.JSContext() as env1:

env1.eval("""

var_i = 1;

var_f = 1.0;

var_s = "test";

var_b = true;

""")

vars = env1.locals

var_i = vars.var_i

print var_i

javascript取得python里面的值

复制代码代码如下:

import PyV8

with PyV8.JSContext() as env1:

env1.securityToken = "foo"

env1.locals.prop = 3

print int(env1.eval("prop"))

python和javascript里面的函数交互

python调用javascript里面的函数python调用func就可以使用js里面的function函数了

复制代码代码如下:

import PyV8

with PyV8.JSContext() as ctxt:

func = ctxt.eval("""

(function ()

{

function a()

{

return "abc";

}

return a();

})

""")

print func()

这样也可以

复制代码代码如下:

import PyV8

with PyV8.JSContext() as ctxt:

func = ctxt.eval("""

function a()

{

return "abc";

}

function c()

{

return "abc";

}

""")

a = ctxt.locals.a

print a()

4.如何实现 C/C++ 与 Python 的通信

Python指它的标准实现,即CPython(虽然不是很严格)本文分4个部分C/C++ 调用 Python (基础篇)— 仅讨论Python官方提供的实现方式Python 调用 C/C++ (基础篇)— 仅讨论Python官方提供的实现方式C/C++ 调用 Python (高级篇)— 使用 CythonPython 调用 C/C++ (高级篇)— 使用 SWIG练习本文中的例子,需要搭建Python扩展开发环境。

具体细节见搭建Python扩展开发环境 - 蛇之魅惑 - 知乎专栏1 C/C++ 调用 Python(基础篇)Python 本身就是一个C库。你所看到的可执行体python只不过是个stub。

真正的python实体在动态链接库里实现,在Windows平台上,这个文件位于 %SystemRoot%\System32\python27.dll。你也可以在自己的程序中调用Python,看起来非常容易://my_python.c #include int main(int argc, char *argv[]) { Py_SetProgramName(argv[0]); Py_Initialize(); PyRun_SimpleString("print 'Hello Python!'\n"); Py_Finalize(); return 0; } 在Windows平台下,打开Visual Studio命令提示符,编译命令为cl my_python.c -IC:\Python27\include C:\Python27\libs\python27.lib 在Linux下编译命令为gcc my_python.c -o my_python -I/usr/include/python2.7/ -lpython2.7 在Mac OS X 下的编译命令同上产生可执行文件后,直接运行,结果为输出Hello Python! Python库函数PyRun_SimpleString可以执行字符串形式的Python代码。

虽然非常简单,但这段代码除了能用C语言动态生成一些Python代码之外,并没有什么用处。我们需要的是C语言的数据结构能够和Python交互。

下面举个例子,比如说,有一天我们用Python写了一个功能特别强大的函数:def great_function(a): return a + 1 接下来要把它包装成C语言的函数。我们期待的C语言的对应函数应该是这样的:int great_function_from_python(int a) { int res; // some magic return res; } 首先,复用Python模块得做'import',这里也不例外。

所以我们把great_function放到一个module里,比如说,这个module名字叫 great_module.py接下来就要用C来调用Python了,完整的代码如下:#include int great_function_from_python(int a) { int res; PyObject *pModule,*pFunc; PyObject *pArgs, *pValue; /* import */ pModule = PyImport_Import(PyString_FromString("great_module")); /* great_module.great_function */ pFunc = PyObject_GetAttrString(pModule, "great_function"); /* build args */ pArgs = PyTuple_New(1); PyTuple_SetItem(pArgs,0, PyInt_FromLong(a)); /* call */ pValue = PyObject_CallObject(pFunc, pArgs); res = PyInt_AsLong(pValue); return res; } 从上述代码可以窥见Python内部运行的方式:所有Python元素,module、function、tuple、string等等,实际上都是PyObject。C语言里操纵它们,一律使用PyObject *。

Python的类型与C语言类型可以相互转换。Python类型XXX转换为C语言类型YYY要使用PyXXX_AsYYY函数;C类型YYY转换为Python类型XXX要使用PyXXX_FromYYY函数。

也可以创建Python类型的变量,使用PyXXX_New可以创建类型为XXX的变量。若a是Tuple,则a[i] = b对应于 PyTuple_SetItem(a,i,b),有理由相信还有一个函数PyTuple_GetItem完成取得某一项的值。

不仅Python语言很优雅,Python的库函数API也非常优雅。现在我们得到了一个C语言的函数了,可以写一个main测试它#include int great_function_from_python(int a); int main(int argc, char *argv[]) { Py_Initialize(); printf("%d",great_function_from_python(2)); Py_Finalize(); } 编译的方式就用本节开头使用的方法。

在Linux/Mac OSX运行此示例之前,可能先需要设置环境变量:bash:export PYTHONPATH=.:$PYTHONPATH csh:setenv PYTHONPATH .:$PYTHONPATH 2 Python 调用 C/C++(基础篇)这种做法称为Python扩展。比如说,我们有一个功能强大的C函数:int great_function(int a) { return a + 1; } 期望在Python里这样使用:>>> from great_module import great_function >>> great_function(2) 3 考虑最简单的情况。

我们把功能强大的函数放入C文件 great_module.c 中。#include int great_function(int a) { return a + 1; } static PyObject * _great_function(PyObject *self, PyObject *args) { int _a; int res; if (!PyArg_ParseTuple(args, "i", &_a)) return NULL; res = great_function(_a); return PyLong_FromLong(res); } static PyMethodDef GreateModuleMethods[] = { { "great_function", _great_function, METH_VARARGS, "" }, {NULL, NULL, 0, NULL} }; PyMODINIT_FUNC initgreat_module(void) { (void) Py_InitModule("great_module", GreateModuleMethods); } 除了功能强大的函数great_function外,这个文件中还有以下部分:包裹函数_great_function。

它负责将Python的参数转化为C的参数(PyArg_ParseTuple),调用实际的great_function,并处理great_function的返回值,最终返回给Python环境。导出表。

5.怎样让Python脚本与C++程序互相调用

二、Python调用C/C++1、Python调用C动态链接库 Python调用C库比较简单,不经过任何封装打包成so,再使用python的ctypes调用即可。

(1)C语言文件:pycall.c [html] view plain copy /***gcc -o libpycall.so -shared -fPIC pycall.c*/ #include #include int foo(int a, int b) { printf("you input %d and %d\n", a, b); return a+b; } (2)gcc编译生成动态库libpycall.so:gcc -o libpycall.so -shared -fPIC pycall.c。使用g++编译生成C动态库的代码中的函数或者方法时,需要使用extern "C"来进行编译。

(3)Python调用动态库的文件:pycall.py [html] view plain copy import ctypes ll = ctypes.cdll.LoadLibrary lib = ll("./libpycall.so") lib.foo(1, 3) print '***finish***' (4)运行结果:2、Python调用C++(类)动态链接库 需要extern "C"来辅助,也就是说还是只能调用C函数,不能直接调用方法,但是能解析C++方法。不是用extern "C",构建后的动态链接库没有这些函数的符号表。

(1)C++类文件:pycallclass.cpp [html] view plain copy #include using namespace std; class TestLib { public: void display(); void display(int a); }; void TestLib::display() { cout<<"First display"< using namespace std; int test() { int a = 10, b = 5; return a+b; } int main() { cout<<"---begin---"<

可以用Python来写扩展,也可以用C和C++之类的编译型的语言来写扩展。Python在设计之初就考虑到要让模块的导入机制足够抽象。

抽象到让使用模块的代码无法了解到模块的具体实现细节。Python的可扩展性具有的优点:方便为语言增加新功能、具有可定制性、代码可以实现复用等。

为 Python 创建扩展需要三个主要的步骤:创建应用程序代码、利用样板来包装代码和编译与测试。(1)创建应用程序代码 [html] view plain copy #include #include #include int fac(int n) { if (n < 2) return(1); /* 0! == 1! == 1 */ return (n)*fac(n-1); /* n! == n*(n-1)! */ } char *reverse(char *s) { register char t, /* tmp */ *p = s, /* fwd */ *q = (s + (strlen(s) - 1)); /* bwd */ while (p < q) /* if p < q */ { t = *p; /* swap & move ptrs */ *p++ = *q; *q-- = t; } return(s); } int main() { char s[BUFSIZ]; printf("4! == %d\n", fac(4)); printf("8! == %d\n", fac(8)); printf("12! == %d\n", fac(12)); strcpy(s, "abcdef"); printf("reversing 'abcdef', we get '%s'\n", \ reverse(s)); strcpy(s, "madam"); printf("reversing 'madam', we get '%s'\n", \ reverse(s)); return 0; } 上述代码中有两个函数,一个是递归求阶乘的函数fac();另一个reverse()函数实现了一个简单的字符串反转算法,其主要目的是修改传入的字符串,使其内容完全反转,但不需要申请内存后反着复制的方法。

(2)用样板来包装代码 接口的代码被称为“样板”代码,它是应用程序代码与Python解释器之间进行交互所必不可少的一部分。样板主要分为4步:a、包含Python的头文件;b、为每个模块的每一个函数增加一个型如PyObject* Module_func()的包装函数;c、为每个模块增加一个型如PyMethodDef ModuleMethods[]的数组;d、增加模块初始化函数void initModule()。

python实现数据中心与c语言交互

转载请注明出处代码入门网 » python实现数据中心与c语言交互(怎么在Python和C++之间互相交互数据)

资讯

pythonsse(现在Python的工作好找吗?需求量怎么样?)

阅读(34)

本文主要为您介绍pythonsse,内容包括在python中如何使用kmeans得出SSE,matlab神经网络训练SSE和SSW什么意思?,现在Python的工作好找吗?需求量怎么样?。这样的问题已经解答了很多次,今天再来回答一次吧。现在Python的工作好找吗?现在Python可

资讯

osx10.11安装python(微软Win10与苹果OSX10.11有哪些不同?)

阅读(39)

本文主要为您介绍osx10.11安装python,内容包括MacOSX怎么下安装pythonmysql,微软Win10与苹果OSX10.11不同?,Windows系统中如何安装Python扩展模块。Windows 10在浏览器方面的改动则更为彻底:微软使用全新的Edge浏览器淘汰掉了老掉牙的IE。由

资讯

pythonclr(有谁知道现在的coursera怎么下载视频呢~)

阅读(41)

本文主要为您介绍pythonclr,内容包括怎样下载PythonIDLE,python网络编程教程在哪里可以下载?,有谁知道现在的coursera怎么下载视频呢~。国内观看Coursera非常卡顿,经常播放到一半就卡死了,不知道什么原因。因此只能想办法下载下来之后再看。

资讯

pythonre.sub替换多个(python中如何对多个字符快速替换)

阅读(32)

本文主要为您介绍pythonre.sub替换多个,内容包括如何用python的re.sub()方法进行“多处”替换,python中如何对多个字符快速替换,如何用excel搜索单元格内相同内容并删除我将多个关于email。python中快速进行多个字符替换的方法小结先给出结

资讯

caffepythonnan(Windows+Anaconda+caffepython要怎么配置)

阅读(38)

本文主要为您介绍caffepythonnan,内容包括如何用caffe的python接口实现cnn,上海去斐济怎么走机票最便宜?,打算2012去斐济 好像从韩国过去?,设计你的家游戏中文版如果你是个游戏设计师,你会设计什么样的游。首先先生成两个python文件,在src

资讯

pythonmlogging(python程序中logging怎么用)

阅读(32)

本文主要为您介绍pythonmlogging,内容包括python程序中logging怎么用,pythonlogging怎么使用,Oracle与DATAGUARD环境中怎样重建控制文件?。Logging模块构成组成主要分为四个部分:Loggers:提供应用程序直接使用的接口Handlers:将Loggers产生的

资讯

python改键(怎么用python一次性修改所有键对应的值)

阅读(36)

本文主要为您介绍python改键,内容包括怎么用python一次性修改所有键对应的值,Python中怎么在程序中设置用ESC键退出一个死循环,Python常见文件如何操作?。说明:python中怎么改变一个字典的对应键的值很简单,直接赋值即可。2、代码:dic = {key:

资讯

python找工作好找吗(python的就业现在怎么样?)

阅读(35)

本文主要为您介绍python找工作好找吗,内容包括python的就业现在怎么样?,python好找工作吗,工资怎么样,Python就业前景怎么样?现在好找工作吗?。学python的话北上广深就业还不错,工资不低。广州python工程师的平均薪资是11790,还是很不错的,深

资讯

pythonoddeven(oddeven什么意思)

阅读(38)

本文主要为您介绍pythonoddeven,内容包括计算机程序设计语言中"odd&#39;&#39;和"even&#39;&#39;是什么意思?,(Python)1),编写程序,输入一些整数,分别计算出所有奇数和偶数之和,并输出。odd number意思是奇数。even number意思是偶数。例句:o

资讯

python3os.system(Python3中os.system调用问题)

阅读(40)

本文主要为您介绍python3os.system,内容包括Python3中os.system调用问题,pythonos.system()问题,操作系统有几种怎么办?。if not os.path.exists(dst_dir):os.mkdir(dst_dir)print("this DIR %s s

资讯

python共享全局变量(如何提升python程序性能呢?)

阅读(41)

本文主要为您介绍python共享全局变量,内容包括python中如何在不同文件间共享全局变量,python中如何在不同文件间共享全局变量,python下多进程时全局变量在子进程怎么能更新?遇到从子进程更?。使用局部变量 尽量使用局部变量代替全局变量:便

资讯

pythonsse(现在Python的工作好找吗?需求量怎么样?)

阅读(34)

本文主要为您介绍pythonsse,内容包括在python中如何使用kmeans得出SSE,matlab神经网络训练SSE和SSW什么意思?,现在Python的工作好找吗?需求量怎么样?。这样的问题已经解答了很多次,今天再来回答一次吧。现在Python的工作好找吗?现在Python可

资讯

osx10.11安装python(微软Win10与苹果OSX10.11有哪些不同?)

阅读(39)

本文主要为您介绍osx10.11安装python,内容包括MacOSX怎么下安装pythonmysql,微软Win10与苹果OSX10.11不同?,Windows系统中如何安装Python扩展模块。Windows 10在浏览器方面的改动则更为彻底:微软使用全新的Edge浏览器淘汰掉了老掉牙的IE。由

资讯

pythonclr(有谁知道现在的coursera怎么下载视频呢~)

阅读(41)

本文主要为您介绍pythonclr,内容包括怎样下载PythonIDLE,python网络编程教程在哪里可以下载?,有谁知道现在的coursera怎么下载视频呢~。国内观看Coursera非常卡顿,经常播放到一半就卡死了,不知道什么原因。因此只能想办法下载下来之后再看。

资讯

pythonre.sub替换多个(python中如何对多个字符快速替换)

阅读(32)

本文主要为您介绍pythonre.sub替换多个,内容包括如何用python的re.sub()方法进行“多处”替换,python中如何对多个字符快速替换,如何用excel搜索单元格内相同内容并删除我将多个关于email。python中快速进行多个字符替换的方法小结先给出结

资讯

caffepythonnan(Windows+Anaconda+caffepython要怎么配置)

阅读(38)

本文主要为您介绍caffepythonnan,内容包括如何用caffe的python接口实现cnn,上海去斐济怎么走机票最便宜?,打算2012去斐济 好像从韩国过去?,设计你的家游戏中文版如果你是个游戏设计师,你会设计什么样的游。首先先生成两个python文件,在src

资讯

pythonmlogging(python程序中logging怎么用)

阅读(32)

本文主要为您介绍pythonmlogging,内容包括python程序中logging怎么用,pythonlogging怎么使用,Oracle与DATAGUARD环境中怎样重建控制文件?。Logging模块构成组成主要分为四个部分:Loggers:提供应用程序直接使用的接口Handlers:将Loggers产生的

资讯

python忽略None(Python打印print返回值为None是怎么回事?)

阅读(34)

本文主要为您介绍python忽略None,内容包括Python打印print返回值为None是怎么回事?,python关于none的问题,python运行结果显示none?。列表的reverse方法会反转列表并返回None,图中打印的是reverse的返回值。要返回一个反转的新列表(不反转原

资讯

pythondefif

阅读(2)

本文主要为您介绍pythondefif,内容包括pythondef最后if==true为什么说true没定义,求Python二叉树的几个算法求几个二叉树的method!1)给?,请大家看看这个python程序,哪里错了def hanoi(n。二叉树算法,网上是比较多的; 可能按照你的需求不是很

资讯

数据挖掘python等

阅读(2)

本文主要为您介绍数据挖掘python等,内容包括数据挖掘方向,Python中还需要学习哪些内容,学数据挖掘,爬虫,筛选,分析处理等这些怎么学起,python数据挖掘培训去哪好?。老男孩教育Python课程内容:阶段一:Python开发基础 Python开发基础课程内容包

资讯

pythontoexe

阅读(2)

本文主要为您介绍pythontoexe,内容包括如何将python文件生成exe,python程序怎么用py2exe打包(其他软件也可以)pyth,今天学Python,照着书写了个HelloWorld,不知道要怎?。1。下载并安装py2exe(确认你下载的py2exe版本 和你电脑上装的python版