我有一个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扩展名
有没有人在这方面取得任何成功?
答案 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()