【问题标题】:C, C++ Interface with PythonC、C++ 与 Python 的接口
【发布时间】:2011-05-11 07:37:07
【问题描述】:

我的 C++ 代码呈指数级增长。每次运行我的代码(不同的运行条件)时,我都有许多变量(主要是布尔值)需要更改。我过去曾使用main( int argc, char* argv[]) 函数的参数命令行输入来完成此操作。

由于这种方法变得很麻烦(我有 18 种不同的运行条件,因此有 18 种不同的参数 :-( ),我想转向与 python 的接口(如果需要是 Bash )。理想情况下,我想编写一个 python脚本,我在其中设置数据成员的值,然后运行代码。

有没有人有任何可以帮助我的指针/信息?最好是一个简单的编码示例或我可以查找的 URL。

从原始问题编辑:

抱歉,我认为我的问题并不清楚。我不想在 c++ 中使用 main( int argc, char* argv[]) 功能。而不是在命令行上设置变量。我可以使用python在我的c++代码中声明和初始化数据成员吗?

再次感谢迈克

【问题讨论】:

  • 您是否希望您的脚本只是从控制台或 GUI 读取输入,然后使用收集的参数启动您的程序?

标签: c++ python c bash


【解决方案1】:

使用 subprocess 从 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+' '+...)

【讨论】:

  • 你还需要import shlex
【解决方案2】:

C/C++ 和 Python 之间的接口有大量文档,并且有几种不同的方法。但是,如果您只是设置值,那么使用 Python 可能有点过头了,Python 更适合通过将其交给解释器来自定义流程中的大型操作。

我个人建议研究“ini”文件方法,无论是传统的还是使用 XML,甚至是 Lua 等更轻量级的脚本语言。

【讨论】:

  • 嗨 acron,看起来你是对的。 ini 文件方法确实适合我的项目规模。谢谢你的帮助。我不得不说,所有其他的答案和建议都很棒:-D。非常感谢大家!!!!!!
【解决方案3】:

您可以使用 subprocess 模块来启动带有定义的命令行参数的可执行文件:

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()

【讨论】:

    【解决方案4】:

    使用ctypes 模块,您可以调用任意C 库。

    【讨论】:

      【解决方案5】:

      有几种方法可以将 C 和 C++ 代码与 Python 交互:

      【讨论】:

        【解决方案6】:

        我只能建议看看swig:使用director特性,它允许完全集成C++和python,包括从一种语言到另一种语言的交叉派生

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-09-17
          • 2021-07-17
          • 2010-09-06
          • 2014-02-08
          • 2011-12-23
          • 1970-01-01
          • 2010-12-18
          • 2018-10-03
          相关资源
          最近更新 更多