C,C++与Python的接口
C, C++ Interface with Python
我的c ++代码呈指数级增长。我有许多变量(主要是布尔值),每次运行代码时都需要更改(不同的运行条件)。我过去曾使用 main( int argc, char* argv[])
函数的参数命令行输入完成此操作。
由于这种方法变得很麻烦(我有 18 种不同的运行条件,因此有 18 种不同的参数:-( ),我想转向与 python 接口(如果需要的话是 Bash)。理想情况下,我想编写一个 python 脚本,在其中设置数据成员的值,然后运行代码。
有没有人有任何可以帮助我的指针/信息?更好的是我可以查找的简单编码示例或 URL。
从原始问题编辑:
对不起,我认为我的问题不清楚。我不想在 c++ 中使用 main( int argc, char* argv[])
功能。而不是在命令行上设置变量。我可以使用 python 在 c++ 代码中声明和初始化数据成员吗?
再次感谢迈克
使用子进程从 python 执行程序。
import subprocess as sp
import shlex
def run(cmdline):
process = sp.Popen(shlex.split(cmdline), stdout=sp.PIPE, stderr=sp.PIPE)
output, err = process.communicate()
retcode = process.poll()
return retcode, output, err
run('./a.out '+arg1+' '+arg2+' '+...)
C/C++ 和 Python 之间的接口有大量文档,并且有几种不同的方法。但是,如果您只是设置值,那么使用 Python 可能有点过分,它更适合通过将其分配给解释器来自定义流程中的大型操作。
我个人建议研究"ini"文件方法,无论是传统还是使用 XML,甚至是像 Lua 这样更轻的脚本语言。
您可以使用子流程模块启动具有定义的命令行参数的可执行文件:
import subprocess
option1 = True
option2 = Frue
# ...
optionN = True
lstopt = ['path_to_cpp_executable',
option1,
option2,
...
optionN
]
lstopt = [str(item) for item in lstopt] # because we need to pass strings
proc = subprocess.Popen(lstrun, close_fds = True)
stdoutdata, stderrdata = proc.communicate()
如果你使用的是Python 2.7或Python 3.2,那么OrderedDict将使代码更具可读性:
from collections import OrderedDict
opts = OrderedDict([('option1', True),
('option2', False),
]
lstopt = (['path_to_cpp_executable'] +
list(str(item) for item in opts.values())
)
proc = subprocess.Popen(lstrun, close_fds = True)
stdoutdata, stderrdata = proc.communicate()
使用 ctypes 模块,您可以调用任意 C 库。
几种方法可以将 C 和 C++ 代码与 Python 接口:
- SWIG
- Boost.Python
- 赛通
我只能建议看看swig:使用director功能,它允许完全集成C++和python,包括从onle语言到另一种语言的交叉派生
- 分解SWIG Python接口 - 容器会产生命名空间冲突
- 如何制作一个满足SWIG中接口的python类
- 如何创建一个接口,允许我访问C++中的按钮(和其他ui)函数,该函数是使用python中的MFC实现的
- 如何使用 SWIG 接口访问 python 中的 C++ typedef'd 结构
- 无法将__str__特殊方法与Boost::Python接口
- 如何为C++库实现 Python 接口
- Python - 导入 c++ 模块接口 - 无法打开共享对象文件
- 通过SWIG禁用python-c 接口的隐式类型检查代码
- Python-C++ 接口中的内存泄漏
- 正在写入新的Python缓冲区接口
- Python C 接口,不同的模块共享静态变量
- 将C++代码与Python接口的最佳方式是什么
- 在boost python中公开C++接口
- 将 python 与 c++ 接口
- 构建一个RESTFul C++api来与Python接口
- 如何通过Python C api在QT和Python之间进行接口
- 使用SWIG实现c++和Python的接口
- %Python接口的C++库的类型映射
- 向SWIG python接口返回字符串的最佳方法是什么?
- 具有许多函数的python-c++接口的代码的python结构是什么?