代码之家  ›  专栏  ›  技术社区  ›  OneRaynyDay

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

  •  1
  • OneRaynyDay  · 技术社区  · 7 年前

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

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

    我在网上搜索了python中的g++/clang绑定,它们都是简单的解析器(例如, libclang ),实际上不编译任何内容。

    有没有别的方法我不知道呢?或者我需要咬紧牙关 subprocess ?

    1 回复  |  直到 7 年前
        1
  •  3
  •   PaulR    7 年前

    Mat在python3中的评论使用 input 论证 subprocess.run

    这使用了一个事实,即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'])