python - 从 python 调用 g++/clang 来编译 python 字符串

标签 python c++ compilation

我目前正在编写一个将 C++ 代码生成为 python 字符串的应用程序。我想编译这段代码并从中创建一个 .so

最简单的方法是将包含代码的python字符串写入文件,并使用subprocess.Popen(...)调用g++/clang将其编译成。所以,但我宁愿不先将字符串写入磁盘,而是将其作为中间步骤。

我在网上查找了 python 中的 g++/clang 绑定(bind),它们都是简单的解析器(例如,libclang),实际上并不编译任何东西。

是否有我在这里缺少的替代方法?还是我需要硬着头皮使用 subprocess

最佳答案

Mat 在 python3 中使用 subprocess.runinput 参数进行注释

这利用了 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/

相关文章:

java - 从命令提示符编译并运行 Eclipse 项目

assembly - 所有程序最终都转换为汇编指令吗?

c++ - 使用 MSBuild API 编译 vcxproj 时出现问题 - 错误 MSB4057

python - 完美转发——Python

python - 稀疏数组的 numpy 向量列表

python - Django - 缺少 ModelChoiceField 空选择

python - seaborn boxplot x轴作为数字,而不是标签

c++ - 递归 vector 返回

c++ - C++使用三元运算符声明变量

c++ - 在C++中最快实现简单,虚拟,观察者排序的模式?