我想知道如何创建一个运行 C++ 代码的 python 脚本。
我确实找到了一些关于 subprocess 模块的讨论,但它用于运行命令我确实找到了一些关于 Boost 和 Swig 的讨论,但作为初学者我不明白如何使用它们
测试子流程:
import subprocess
subprocess.call(["g++", "main.cpp"],shell = True)
tmp=subprocess.call("main.cpp",shell = True)
print("printing result")
print(tmp)
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮助我吗!
一个简单的例子是创建一个.cpp文件:
// cpy.cpp
#include <iostream>
int main()
{
std::cout << "Hello World! from C++" << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
和一个 Python 脚本:
// cpy.py
import subprocess
cmd = "cpy.cpp"
subprocess.call(["g++", cmd])
subprocess.call("./a.out")
Run Code Online (Sandbox Code Playgroud)
然后在终端中,运行 Python 脚本:
~ python cpy.py
~ Hello World! from C++
Run Code Online (Sandbox Code Playgroud)
编辑:
如果您想控制从 Python 调用 C++ 函数,您将需要创建绑定以使用 C++ 扩展 Python。这可以通过多种方式完成,Python 文档有一个完整的原始实现,说明如何在简单的情况下完成它,但也有诸如 pybind 和 boost.Python 之类的库可以为您完成此操作。
boost.Python 的一个例子:
// boost-example.cpp
#include <iostream>
#include <boost/python.hpp>
using namespace boost::python;
int printHello()
{
std::cout << "Hello, World! from C++" << std::endl;
}
BOOST_PYTHON_MODULE(hello)
{
def("print_hello", printHello);
}
Run Code Online (Sandbox Code Playgroud)
您将需要创建一个共享对象文件 (.so) 并确保链接适当的 Python 头文件和库。一个示例可能如下所示:
g++ printHello.cpp -fPIC -shared -L/usr/lib/python2.7/config-3.7m-x86_64-linux-gnu/ -I/usr/include/python2.7 -lpython2.7 -lboost_python -o hello.so
Run Code Online (Sandbox Code Playgroud)
在您创建hello.so文件的同一目录中:
python
>>> import hello
>>> hello.print_hello()
Hello, World! from C++
Run Code Online (Sandbox Code Playgroud)
Boost.Python 可以用来做一些非常神奇的事情,包括公开类、包装重载函数、公开全局和类变量以供读写、混合 Python/C++ 继承层次结构,所有这些都具有显着的性能提升。如果您想沿着这条路线走下去,我建议您阅读这些文档并了解 API。
您可以使用python的.os模块来运行os命令。
import os
myCmd1 = 'ls -la'
os.system(myCmd)
Run Code Online (Sandbox Code Playgroud)
您的命令可以是“g++ main.cpp secondary.cpp -o run”,然后您可以使用相同的机制来调用 shell ./run。
确保您拥有正确的权限