假设我有一个程序A.我运行它,并从文件foo.txt开始执行一些操作。现在A终止了。
A的新运行。它检查文件foo.txt是否已更改。如果文件已更改,则A再次运行其操作,否则退出。
是否存在库函数/外部库?
当然可以使用md5 +包含md5的文件/ db来实现。我想防止重新发明轮子。
答案 0 :(得分:9)
不太可能有人为了这么简单的事情而建立了一个库。解决方案有13行:
import pickle
import md5
try:
l = pickle.load(open("db"))
except IOError:
l = []
db = dict(l)
path = "/etc/hosts"
checksum = md5.md5(open(path).read())
if db.get(path, None) != checksum:
print "file changed"
db[path] = checksum
pickle.dump(db.items(), open("db", "w")
答案 1 :(得分:4)
仅供参考 - 对于那些使用此示例的人来说,出现此错误:“TypeError:无法腌制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()
答案 2 :(得分:2)
这是实现这么简单的事情之一,因此特定于应用程序,以至于库中确实没有任何意义,任何用于此目的的库都会变得如此笨拙,试图适应需要进行许多变化,学习和使用库需要花费尽可能多的时间来实现它。
答案 3 :(得分:0)
我们只是检查上次修改日期。即在第一次操作之后,我们将最后修改日期存储在db中,然后在再次运行之前,我们将文件foo.txt的最后修改日期与存储在db中的值进行比较..如果它们不同,我们再次执行操作?