0

ファイルハンドラーの背後にあるファイルタイプを見つけるという問題に直面しています。

apache_log_parser が 1 行の解析に失敗し、プログラム全体が異常終了したため、これが必要です。

Traceback (most recent call last):   File "VirtualEnvs/moslog/bin/mosloganalisys.py", line 108, in
 <module>
     totalines = count_agent(logfilehandler,agentcount,totalines)   File "VirtualEnvs/moslog/bin/mosloganalisys.py", line
 27, in count_agent
     log_line_data = line_parser(line)   File "VirtualEnvs/moslog/lib/python2.7/site-packages/apache_log_parser/__init__.py",
 line 225, in parse
     raise LineDoesntMatchException(log_line=log_line, regex=self.log_line_regex.pattern)

その理由は、ファイル ハンドラーが gz ファイルを指していたためです。これは二重圧縮ファイル *.gz.gz であったため、gzip ライブラリを使用してファイルを解凍したかどうかに関係なく、解凍されたファイルは別の gzip ファイルでした。

そのため、python-magic ライブラリを使用してファイルの種類を調べようとしましたが、ファイル名が必要なようです。

     72         """
     73         self._thread_check()
---> 74         if not os.path.exists(filename):
     75             raise IOError("File does not exist: " + filename)
     76 

/usr/lib64/python2.7/genericpath.pyc in exists(path)
     16     """Test whether a path exists.  Returns False for broken symbolic links"""
     17     try:
---> 18         os.stat(path)
     19     except os.error:
     20         return False

私はすでに try: / expect: ステートメントを実装していますが、これは多くの無駄な行を処理するという問題を実際には解決していません。

あなたは何をすることを提案しますか? ありがとう

4

1 に答える 1

0

魔法のライブラリをよく見て、それを行う方法を見つけました:

logfile=open('workspace/mosloganalysis/access.log.1429142400','r').read(1024)
print logfile
magic.from_buffer(logfile)

最初の 1024 文字を読み取り、関数 magic.from_buffer を使用してファイルを開くだけです。

于 2015-05-22T12:41:39.077 に答える