2016-03-22 5 views
1

を解決して下さいランニング。は私がtecu.a2lと呼ばれるファイルのチェックサムをチェックし、いくつかの.md5ファイルと比較する簡単なチェックサムスクリプトを作成した簡単なチェックサム比較スクリプト

理解し、物事を容易にするために:

iはチェックサム1x2x3xでtecu.a2lてきたとしましょう。したがって、md5ファイル(正しく生成された場合)には同じチェックサム(1x2x3x)が必要です。 md5ファイルの1つに最新のtecu.a2lとは異なるチェックサムがあると、エラーが発生します。

私の説明をよく理解していないと、コードが空白を埋めることがあります。

import hashlib 
import dst_creator_constants as CONST 
import Tkinter 

path_a2l = 'C:<path>\tecu.a2l' 
md5 = hashlib.md5() 
blocks = 65565 
with open(path_a2l, 'rb') as a2l: 
    readA2L = a2l.read(blocks) 
    generatedMD5 = md5.hexdigest() 
    print "stop1" 

ihx_md5_files = CONST.PATH_DELIVERABLES_DST 
for file in ihx_md5_files: 
    print "stop2" 
    if file.endswith('.md5'): 
     print "stop3" 
     readMD5 = file.read() 
     if compare_checksums: 
      print "Yes" 
      # Add successful TkInter msg here 
     else: 
      print "No" 
      # Add error msg here 


def compare_checksums(generatedMD5, readMD5): 
    if generatedMD5 == readMD5: 
     return True 
    else: 
     return False 

このスクリプトを実行すると、何も起こりません。メッセージはありません。私がpython checksum.pyをcmdに入力すると、メッセージは返されません。だから私はいくつかのprintステートメントに何が問題になるかを見てみましょう。問題は、stop3がコマンドプロンプトに表示されないことです。つまり、この問題はif file.endswith('.md5'):文と関係しています。

私がこのfile.endswith()の文章を私がこれに関連して書いた以前のスクリプトに使用したので、なぜそれが原因であるのか分かりません。

+0

本当にうまくいけば、本当に、本当に、おそらく問題は別の場所です。 'CONST.PATH_DELIVERABLES_DST'の定義や印刷物を見せてくれますか? –

+0

また、 'compare_checksums'は関数への参照です。 'compare_checksums()'を使って呼び出す必要があります。 –

+0

これはちょうど 'path_a2l'とまったく同じです。私は単純に' ihx_md5_files'というディレクトリを手動で追加することができますが、それは助けになりませんでした。私も前に同じパス定義を使用していますので、問題はありません。括弧を追加しても、CMDは残念なことに 'stop3'を書いてくれませんでした。 –

答えて

0

ハッシュオブジェクトを作成していません。ファイルはreadA2Lの変数にとどまります。また、ファイルが許可する65565バイトのバッファよりも大きい可能性があります。以下の関数のようにハッシャーを更新して、結果が何であるかをお知らせください。

import hashlib as h 
from os.path import isfile 

hasher = h.md5() 
block_size = 65536 


def get_hexdigest(file_path, hasher, block_size): 

    if isfile(file_path): 
     with open(file_path, 'rb') as f: 
      buf = f.read(block_size) 

      while len(buf) > 0: 
       # Update the hasher until the entire file has been read 
       hasher.update(buf) 
       buf = f.read(block_size) 

     digest = hasher.hexdigest() 
    else: 
     return None 
    return digest 
関連する問題