我如何使用python运行Hello World C ++代码

时间:2019-10-16 23:11:00

标签: python c++

我想知道如何创建运行c ++代码的python脚本。

我确实找到了有关子流程模块的一些讨论,但是它用于运行命令 我确实找到了一些有关Boost和Swig的话题,但是作为一个初学者,我并不理解如何使用它们。

测试子流程:

import subprocess
subprocess.call(["g++", "main.cpp"],shell = True)
tmp=subprocess.call("main.cpp",shell = True)
print("printing result")
print(tmp)

有人可以帮我吗!

3 个答案:

答案 0 :(得分:2)

一个简单的示例是创建一个.cpp文件:

// cpy.cpp
#include <iostream>

int main()
{
    std::cout << "Hello World! from C++" << std::endl;
    return 0;
}

还有一个Python脚本:

// cpy.py
import subprocess
cmd = "cpy.cpp"
subprocess.call(["g++", cmd])
subprocess.call("./a.out")

然后在终端中,运行python脚本:

~ python cpy.py
~ Hello World! from C++

编辑:

如果要控制从python调用c ++函数,则需要创建绑定/嵌入c ++。这可以通过多种方式完成,python文档对如何在简单的情况下实现了彻底的原始实现,但是也有诸如pybind和boost.python之类的库可以为您完成此操作。

带有boost.python的示例:

// boost-example.cpp
#include <iostream>
#include <boost/python.hpp>

using namespace boost::python;

void run(PyObject *arg)
{
    std::cout << "Hello, World! from C++" << std::endl;
}

BOOST_PYTHON_MODULE(test)
{
        def("run", run, args("arg"));
}

您将需要这样的setup.py

from distutils.core import setup
from distutils.extension import Extension

ext_instance = Extension(
    'test',
    sources=['boost-example.cpp'],
    libraries=['boost_python'],
    extra_compile_args = ["-std=c++11"],
)

setup(
    name='test',
    version='0.1',
    ext_modules=[ext_instance])

运行python脚本:python setup.py build_ext --inplace 现在您应该可以启动python终端了:

~ python2.7
~ import test
~ test.run(1)
~ Hello World! from C++

答案 1 :(得分:1)

作为将C ++代码编译成单独的程序并执行该程序的替代方法,您还可以使用cppyy(http://cppyy.org)在同一程序内通过JIT直接运行C ++代码。

示例:

import cppyy
cppyy.cppdef('''
void hello() {
    std::cout << "Hello, World!" << std::endl;
}''')
cppyy.gbl.hello()   # calls the C++ function 'hello' defined above

答案 2 :(得分:0)

您可以使用python的.os模块来运行os命令。

import os
myCmd1 = 'ls -la'
os.system(myCmd)

您的命令可以是'g ++ main.cpp second.cpp -o run',那么您可以使用相同的机制来调用./run shell。

确保您拥有正确的权限