我想知道如何创建运行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)
有人可以帮我吗!
答案 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。
确保您拥有正确的权限