FYI - для тех, кто использует этот пример, которые получили эту ошибку: «Ошибка типа: невозможно выбрать объекты HASH»
Просто измените следующее (опционально обновите md5 до hashlib, md5 устарела):
import pickle
import hashlib #instead of md5
try:
l = pickle.load(open("db"))
except IOError:
l = []
db = dict(l)
path = "/etc/hosts"
#this converts the hash to text
checksum = hashlib.md5(open(path).read()).hexdigest()
if db.get(path, None) != checksum:
print "file changed"
db[path] = checksum
pickle.dump(db.items(), open("db", "w"))
так что просто поменяйте:
checksum = hashlib.md5(open(path).read())
до
checksum = hashlib.md5(open(path).read()).hexdigest()