2016-03-22 40 views
1

Tecu.a2l adlı bir dosyanın sağlama toplamını denetleyen ve birkaç .md5 dosyasına benzeyen basit bir sağlama toplamı komut dosyası oluşturdum. Bu komut dosyası, her komut dosyasının tam olarak aynı sağlama toplamına sahip olmasını sağlayarak çalışan. Basit bir sağlama toplamı karşılaştırma komut dosyasıyla ilgili sorunları giderme

kolay şeyler anlamak yapmak için:

i sağlama 1x2x3x ile tecu.a2l var düşünelim. Bu yüzden md5 dosyaları (doğru oluşturulduysa) aynı sağlama toplamına sahip olmalıdır (1x2x3x). Md5 dosyalarından biri, en yeni tecu.a2l'den daha farklı bir sağlama toplamına sahipse, bir hata verecektir.

Açıklamam, açıklamamı tam olarak anlamadıysanız boşlukları doldurabilir.

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 

Bu komut dosyasını çalıştırdığımda hiçbir şey olmuyor. Mesaj yok, hiçbir şey. python checksum.py'u cmd'ye yazıyorsam, mesaj göndermiyor. Bu yüzden, sorunun ne olabileceğini görmek için bazı print ifadelerini ekledim. Sorun, stop3'un komut isteminde hiçbir zaman gösterilmemesidir - bu, sorunun if file.endswith('.md5'): bildirimi ile ilgili bir olaya sahip olduğu anlamına gelir.

Bu file.endswith() ifadesini kullanmış olduğumdan önceki bir betikle ilgili olarak yazdığımdan dolayı neden suçlandığım konusunda hiçbir fikrim yok ve bununla ilgili olarak yazdım, böylece size dönüyorum.

+0

Gerçekten işe yarasa, gerçekten, gerçekten sorun varsa, o zaman sorun başka bir yerdedir. Bize "CONST.PATH_DELIVERABLES_DST" tanımını veya bir baskısını gösterebilir misiniz? –

+0

Ayrıca, compare_checksums' bir işlevin bir referansıdır. Bunu aramak için compare_checksums() 'i kullanmalısınız. –

+0

Sadece bir yol 'path_a2l' gibi sadece 'dir' ihx_md5_files' olarak manuel olarak ekleyebilirsiniz ve ben yaptım .. ama yardımcı olmadı. Daha önce de aynı yol tanımını kullandım, bu yüzden sorun yok. parantez eklemek CMD'nin ne yazık ki 'stop3' yazmasına yardım etmedi. –

cevap

0

Bir karma nesne oluşturmuyorsunuz. Dosyanız readA2L değişkeninizde kalır. Ayrıca, dosyanız izin verdiğiniz 65565 bayt tamponundan daha büyük olabilir. Makinenizi aşağıdaki işlev gibi güncellemeyi deneyin ve sonucun ne olduğunu bize bildirin.

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 
İlgili konular