2014-03-18 49 views
0

我想寫一個小程序來獲取一些文件的校驗和。使用代碼over here,我做了這個:爲什麼我的校驗和計算器停止打印?

import hashlib 
import sys 
from functools import partial 

def md5sum(filename): 
    with open(filename, mode='rb') as f: 
     d = hashlib.md5() 
     for buf in iter(partial(f.read, 128), b''): 
      d.update(buf) 
    return d.hexdigest() 

print(md5sum(sys.argv[0])) 

該代碼工作正常。然而,當我嘗試添加像這樣SHA1支持:

import hashlib 
import sys 
from functools import partial 

def md5sum(filename): 
    with open(filename, mode='rb') as f: 
     d = hashlib.md5() 
     for buf in iter(partial(f.read, 128), b''): 
      d.update(buf) 
    return d.hexdigest() 

def sha1sum(filename): 
    with open(filename, mode='rb') as f: 
     d = hashlib.sha1() 
     for buf in iter(partial(f.read, 128), b''): 
      d.update(buf) 
    return d.hexdigest() 

if sys.argv[0] == 'md5': 
    print(md5sum(sys.argv[1])) 
elif sys.argv[0] == 'sha1': 
    print(sha1sum(sys.argv[1])) 

停止打印輸出(用於MD5和SHA1)。我在這裏做錯了什麼?

+0

嘗試在最後的'if'測試之前放置'print(sys.argv [0])';你可能沒有得到你認爲你的系統參數(或者你應該使用'sys.argv [1]'代替)。 –

+0

我一直傾向於使用'optparse'作爲命令行參數,只是我的看法。這樣你就不必擔心所有的索引。 –

回答

3

sys.argv[0]是該腳本的名稱;命令行參數存儲在sys.argv[1:]中。你可能想測試sys.argv[1],而不是:您原來的「工作」的版本永遠只計算腳本本身的MD5哈希

if sys.argv[1] == 'md5': 
    print(md5sum(sys.argv[2])) 
elif sys.argv[1] == 'sha1': 
    print(sha1sum(sys.argv[2])) 

注意。

+0

好主,我是個白癡。我想知道爲什麼MD5不匹配。謝謝您的幫助! – Nathan2055