使用python的subprocess.Popen将字符串传递给gcc

时间:2013-05-14 21:01:39

标签: python linux gcc

我有一个c ++样式的文本文件,我正试图通过gcc来删除注释。最初,我尝试了一种正则表达式方法,但在处理嵌套注释,字符串文字和EOL问题等方面遇到了麻烦。

所以现在我正在尝试做类似的事情:

strip_comments(test_file.c)

def strip_comments(text):
    p = Popen(['gcc', '-w', '-E', text], stdin=PIPE, stdout=PIPE, stderr=STDOUT)
    p.stdin.write(text)
    p.stdin.close()
    print p.stdout.read()

但不是传递文件,我想管道内容,因为我正在尝试预处理的文件实际上没有.c扩展名

有没有人在这方面取得任何成功?

1 个答案:

答案 0 :(得分:2)

这个与subprocess.PIPE一起使用(不推荐使用os.popen()),你还需要向gcc传递额外的-参数以使其处理stdin:

import os
from subprocess import Popen, PIPE
def strip_comments(text):
    p = Popen(['gcc', '-fpreprocessed', '-dD', '-E', '-x', 'c++', '-'], 
            stdin=PIPE, stdout=PIPE, stderr=PIPE)
    p.stdin.write(text)
    p.stdin.close()
    return_code = p.wait()
    print p.stdout.read()