3

コメントを削除するために gcc にパイプしようとしている C++ スタイルのテキスト ファイルがあります。最初は正規表現のアプローチを試みましたが、ネストされたコメント、文字列リテラル、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 拡張子がないため、内容をパイプしたいと思います

このようなもので成功した人はいますか?

4

1 に答える 1

2

これはsubprocess.PIPE(os.popen() は非推奨です) で動作し-ます。標準入力を処理するには、gcc に追加の引数を渡す必要があります。

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()
于 2013-05-14T21:30:45.047 に答える