Python脚本可以用来生成并写入C++文件/程序吗?

5 投票
2 回答
5085 浏览
提问于 2025-04-18 09:17

我在实习期间做单元测试。我的老板总是告诉我,找到自动化的方法是最好的,所以我在想,能不能用Python写个脚本,读取一个有特定结构和语法的文本文件,然后根据这个文本文件生成一个C++文件呢?

我正在使用Google-Test进行单元测试,我觉得这会是公司工具的一个不错补充,但我想知道这样做是否可行,还有没有其他人做过类似的事情。

谢谢!

2 个回答

3

Josh的回答很好,如果你想要扩展功能的话。不过我想你可能会想看看一个简单例子是怎么运作的。大部分工作都是通过subprocess这个模块来完成的。在这里,我使用的是一台Linux机器,所以我的编译器是gcc,但其实你可以很容易地根据你自己的系统架构来调整这个设置。

import subprocess

code = r'''
#include <stdio.h>
int main() {
  for(int i=0;i<5;i++) {
    printf("Testing %d\n",i);
  }
  return 0;
}
'''

f_cpp = "test.cpp"
with open(f_cpp,'w') as FOUT:
    FOUT.write(code)

# Compile the program
f_exec = "./myprogram"
compile_cmd = "gcc {} -o {}".format(f_cpp, f_exec)
subprocess.call(compile_cmd, shell=True)

# Run the program
p = subprocess.Popen(f_exec, shell=True,
                     stdin=subprocess.PIPE, 
                     stdout=subprocess.PIPE)

# Step through the output 
for line in p.stdout:
    print line

这个代码的输出结果是:

Testing 0   
Testing 1
Testing 2
Testing 3
Testing 4
7

当然可以做到。我之前也做过这件事(我们内部用Python生成一些C++代码来读取和写入数据结构)。你可以使用自定义脚本(就像@Kevin在评论中说的,这个很简单),或者如果你想要更有结构的方法,可以使用像Cog这样的Python工具。

不过,任何事情都有利弊。用Python生成C++代码意味着开发者需要学习另一种语言(这没什么大不了的,Python值得学习,而且和C++很搭配),而且在开发和构建过程中会多出一个间接层,还有额外的(Python)代码需要维护。如果你选择这个方法,记得简单是美德;不要陷入试图写一个能“生成各种各样C++代码”的复杂框架的陷阱。

撰写回答