如何通过Boost从python文件导入函数.蟒蛇
How to import a function from python file by Boost.Python
我对boost.python完全陌生。我复习了很多关于使用boost.python应用python的建议,但仍然不容易理解并为我找到解决方案。
我想要的是直接从python"SourceFile"导入一个函数或类
示例文件:主要.cppMyPythonClass.py
假设"MyPythonClass.py"中有一个带"bark()"函数的"Dog"类,我如何在cpp中获取回调和发送参数?
我不知道该怎么办!请帮帮我!
当需要从C++调用Python,并且C++拥有主函数时,必须在C++程序中嵌入Python中断器。The Boost。Python API不是Python/C API的完整包装器,因此可能会发现需要直接调用Python/C API的部分。尽管如此,Boost。Python的API可以简化互操作性。考虑阅读官方的Boost。Python嵌入教程了解更多信息。
以下是嵌入Python的C++程序的基本框架:
int main()
{
// Initialize Python.
Py_Initialize();
namespace python = boost::python;
try
{
... Boost.Python calls ...
}
catch (const python::error_already_set&)
{
PyErr_Print();
return 1;
}
// Do not call Py_Finalize() with Boost.Python.
}
在嵌入Python时,可能需要通过PYTHONPATH
增加模块搜索路径,以便可以从自定义位置导入模块。
// Allow Python to load modules from the current directory.
setenv("PYTHONPATH", ".", 1);
// Initialize Python.
Py_Initialize();
通常情况下,助推。Python API提供了一种以Python-ish方式编写C++代码的方法。以下示例演示了在C++中嵌入Python解释器,并让C++从磁盘导入MyPythonClass
Python模块,实例化MyPythonClass.Dog
的实例,然后在Dog
实例上调用bark()
:
#include <boost/python.hpp>
#include <cstdlib> // setenv
int main()
{
// Allow Python to load modules from the current directory.
setenv("PYTHONPATH", ".", 1);
// Initialize Python.
Py_Initialize();
namespace python = boost::python;
try
{
// >>> import MyPythonClass
python::object my_python_class_module = python::import("MyPythonClass");
// >>> dog = MyPythonClass.Dog()
python::object dog = my_python_class_module.attr("Dog")();
// >>> dog.bark("woof");
dog.attr("bark")("woof");
}
catch (const python::error_already_set&)
{
PyErr_Print();
return 1;
}
// Do not call Py_Finalize() with Boost.Python.
}
给定包含以下内容的MyPythonClass
模块:
class Dog():
def bark(self, message):
print "The dog barks: {}".format(message)
上述程序输出:
The dog barks: woof
Boost python用于从python源代码调用cplusplus函数。很像Perlxs模块。
如果你在main.cpp中有一个函数say bark(),你可以使用boost python将这个main.cpp转换成一个python可调用的模块。
然后从python脚本(假设链接输出文件是main.so):
import main
main.bark()
- 是否可以将函数导入命名空间,但不能导出它?
- 使用导入的函数从嵌入式v8调用webassembly
- C ++ DLL导入:函数调用返回错误的结果
- 编译器如何知道 dll 导入的函数?
- 导入的库函数是否可以在内存中移动
- 在C++中导入 DLL 函数
- 我将类型库(.tlb)导入到Delphi中,但函数参数似乎不正确.我应该如何解决它
- 使用dllimport属性导入的函数参数
- 除了两个构造函数外,C++库导入也可以工作
- 当函数通过.def文件导出时,如何使用dllImport导入函数
- 当在导入函数之前添加__declspec(dllexport)时,它会做什么
- 从我的 DLL 导入 C++ 函数不会导出库
- 从库导入函数./ DLL 文件
- 导入函数 Matlab 编码器和C++可执行文件
- 从DLL C++导入函数时出现问题.LNK 2001
- 如何阻止GNU GCC破坏dll导入函数名
- 从C++dll导入函数时出现问题,错误LNK 2019
- 从不同的C文件导入函数
- 如何通过Boost从python文件导入函数.蟒蛇
- 访问冲突调用导入函数