当前位置: 首页 > news >正文

台州市城市建设规划局网站广河网站建设

台州市城市建设规划局网站,广河网站建设,阜阳网站建设fywzjs,手机app界面设计图本文在 C 中调用 multi.py 脚本,并向它传入参数并执行,然后获得返回值并在 C 中打印结果。 目录 如何在 C 中调用 python 解析器来执行 python 代码(一)?如何在 C 中调用 python 解析器来执行 python 代码&#xff0…

本文在 C++ 中调用 multi.py 脚本,并向它传入参数并执行,然后获得返回值并在 C++ 中打印结果。

目录

  • 如何在 C++ 中调用 python 解析器来执行 python 代码(一)?
  • 如何在 C++ 中调用 python 解析器来执行 python 代码(二)?
  • 如何在 C++ 中调用 python 解析器来执行 python 代码(三)?

脚本 multi.py

def multiply(a,b):print("Will compute", a, "times", b)c = 0for i in range(0, a):c = c + breturn c

代码 main.cpp

官网代码直接复制过来,但执行总会出错:

$./a.out multi multiply 1 8
ModuleNotFoundError: No module named 'multi'
Failed to load "multi"

发现必须在 C++ 中指定 python 脚本路径才行,加上下面两行:

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

最终的 main.cpp 如下:

#define PY_SSIZE_T_CLEAN
#include <Python.h>int
main(int argc, char *argv[])
{PyObject *pName, *pModule, *pFunc;PyObject *pArgs, *pValue;int i;if (argc < 3) {fprintf(stderr,"Usage: call pythonfile funcname [args]\n");return 1;}Py_Initialize();PyRun_SimpleString("import sys");PyRun_SimpleString("sys.path.append('./')");pName = PyUnicode_DecodeFSDefault(argv[1]);/* Error checking of pName left out */pModule = PyImport_Import(pName);Py_DECREF(pName);if (pModule != NULL) {pFunc = PyObject_GetAttrString(pModule, argv[2]);/* pFunc is a new reference */if (pFunc && PyCallable_Check(pFunc)) {pArgs = PyTuple_New(argc - 3);for (i = 0; i < argc - 3; ++i) {pValue = PyLong_FromLong(atoi(argv[i + 3]));if (!pValue) {Py_DECREF(pArgs);Py_DECREF(pModule);fprintf(stderr, "Cannot convert argument\n");return 1;}/* pValue reference stolen here: */PyTuple_SetItem(pArgs, i, pValue);}pValue = PyObject_CallObject(pFunc, pArgs);Py_DECREF(pArgs);if (pValue != NULL) {printf("Result of call: %ld\n", PyLong_AsLong(pValue));Py_DECREF(pValue);}else {Py_DECREF(pFunc);Py_DECREF(pModule);PyErr_Print();fprintf(stderr,"Call failed\n");return 1;}}else {if (PyErr_Occurred())PyErr_Print();fprintf(stderr, "Cannot find function \"%s\"\n", argv[2]);}Py_XDECREF(pFunc);Py_DECREF(pModule);}else {PyErr_Print();fprintf(stderr, "Failed to load \"%s\"\n", argv[1]);return 1;}if (Py_FinalizeEx() < 0) {return 120;}return 0;
}

编译

g++ -I/usr/include/python3.6m -I/usr/include/python3.6m  -Wno-unused-result -Wsign-compare -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fwrapv   -DNDEBUG -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -D_GNU_SOURCE -fPIC -fwrapv  -L/usr/lib64 -lpython3.6m -lpthread -ldl  -lutil -lm  -Xlinker -export-dynamic main.cpp

执行

$./a.out multi multiply 10 8
Will compute 10 times 8
Result of call: 80

总结

和 python 交互,最繁琐的部分应该就是参数处理,本文演示了基础数据结构的输入输出。

还有几个课题留待研究:

  • 对于真实场景,需要处理复杂结构的输入输出,如向量、String、Number 等,怎么做?
  • 如何直接调用代码片段并传参,而不是脚本文件?
http://www.yayakq.cn/news/106366/

相关文章:

  • 重庆官方网站查询系统新闻头条最新消息
  • sns类网站有哪些js特效网站
  • 网站建设网络门户建设银行分期手机网站
  • 花生壳怎么建设网站wordpress文章通过后发邮件
  • 镇江微网站建设为什么网站建设比商场要贵
  • 东莞外贸网站建设开发胶南网站建设价格
  • 找网站做任务领q币医院电子网站建设
  • 家居类企业响应式网站建设部网站注册师
  • 定机票最便宜网站建设wordpress会员下载插件
  • php网页制作作业北京seo优化技术
  • 海南第四建设工程有限公司网站图片生成网址
  • 大型多媒体网站建设工具搜索引擎优化课程总结
  • dede 网站地图做网站搞流量挂联盟广告变现
  • 重庆市城市建设档案馆网站沈阳好的男科医院是哪一家
  • php网站整合dz论坛wordpress微擎
  • 深圳龙华医院网站建设苏州工程建设网
  • 哪个网站做供求信息硬件开发工程师是做什么的
  • 电子商务网站建设与实例心得免费网站的平台
  • 免费网站建设垂询186 6159 6345代理注册公司哪里好
  • 1核2g 做网站dw制作网站教程
  • 安网站建设如何找网站推广
  • 品牌网站建设网站泾县网站seo优化排名
  • 电子商务网站建设步骤百度文库网站转app免费
  • 手机网站好还是h5好哪家做网站便宜
  • wordpress google插件seo是什么字
  • ps网站参考线怎么做环球购物官方网站
  • 怎么免费做一个网站wordpress菜单显示选项打不开
  • 北京网站建设及推广招聘wordpress验证登录
  • 网站做配置文件的作用东莞手机端建站模板
  • 织梦wap网站模版曲阜网站建设价格