我目前正在编写一个将 C++ 代码生成为 python 字符串的应用程序。我想编译这段代码并从中创建一个 .so
。
最简单的方法是将包含代码的python字符串写入文件,并使用subprocess.Popen(...)
调用g++/clang将其编译成。所以
,但我宁愿不先将字符串写入磁盘,而是将其作为中间步骤。
我在网上查找了 python 中的 g++/clang 绑定(bind),它们都是简单的解析器(例如,libclang
),实际上并不编译任何东西。
是否有我在这里缺少的替代方法?还是我需要硬着头皮使用 subprocess
?
最佳答案
Mat 在 python3 中使用 subprocess.run
的 input
参数进行注释
这利用了 g++ 在传递文件名 -
时接受来自标准输入的代码这一事实。因为没有文件名后缀,编译器无法猜测语言,所以要用-x
指定。 .
添加了 encoding
参数以使输入参数接受一个字符串,否则它需要一个类似字节的对象。
#!/usr/bin/python3
import subprocess
import locale
def compile_cpp(cpp_code_as_string, exe_name):
command = ('g++', '-xc++', '-', '-o', exe_name)
subprocess.run(command, input=cpp_code_as_string, encoding=locale.getpreferredencoding())
hello = '''
#include <iostream>
int main() {
std::cout << "Hello World!\\n";
return 0;
}
'''
compile_cpp(hello, 'hello')
subprocess.run(['./hello'])
关于python - 从 python 调用 g++/clang 来编译 python 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51729698/