多平台统一管理软件接口,如何实现多平台统一管理软件接口
258
2022-08-31
python观察日志(part11)--管道及MD5文件比较
学习笔记,有错必纠
管道
大部分操作系统都提供了命令行接口,也称为字符界面shell,字符界面通常会提供命令来浏览文件系统和启动应用程序,例如,在windows中,可以使用cd来更换目录,敲入python来启动python。任何在字符界而能启动的程序,都可以在python中使用管道对象来启动。
python实现
我们可以利用os.popen来显示当前工作目录下的内容,并使用read一次读取所有输出:
import oscmd1 = 'dir'fp = os.popen(cmd1)res = fp.read()print(res)
部分输出:
2020/05/17 09:57
我们也可以计算文件的MD5码:
import oscmd2 = 'certutil -hashfile os_study.py MD5'fp = os.popen(cmd2)res = fp.read()print(res)
输出:
MD5 哈希(文件 os_study.py):ea 77 14 85 38 af 8b 56 91 6b dd 06 36 a5 9e 89CertUtil: -hashfile 命令成功完成。
MD5值简介
MD5的全称是Message-Digest Algorithm 5,它一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于来确保信息传输完整一致。
MD5值等同于文件的ID,它的值是唯一的。 如果文件已被修改(例如嵌入式病毒,特洛伊木马等),其MD5值将发生变化。 因此,一些常规下载URL提供文件MD并且通常提供MD5值。 如果用户在下载后发现他们的MD5值与网站公告不一致,可能是文件被修改过或者下载出错。
当然,我们也可使用readline一行一行的读取:
import oscmd2 = 'certutil -hashfile os_study.py MD5'fp = os.popen(cmd2)count = 0while True: count += 1 res = fp.readline() if res: print('第{}行:'.format(count), res) else: break
输出:
第1行: MD5 哈希(文件 os_study.py):第2行: ea 77 14 85 38 af 8b 56 91 6b dd 06 36 a5 9e 89第3行: CertUtil: -hashfile 命令成功完成。
最后,当我们完成操作时,需要关闭这个管道:
fp.close()
比较两个文件内容是否相同
我们可以通过生成文件的MD5值,来对比两个文件是否包含相同的内容,不同的内容生成相同MD5值的概率极低,所以我们可以放心使用。
我有三个txt文件,它们分别是test1.txt,test2.txt,test1_copy.txt
test1.txt和test1_copy.txt内容相同,和test2.txt内容不同.
现在,我们用MD5验证一下:
# -*- coding: utf-8 -*-import oscmd1 = 'certutil -hashfile test1.txt MD5'fp1 = os.popen(cmd1)test1_md5 = fp1.read().split('\n')[1]filenames = ['test2.txt', 'test1_copy.txt']for item in filenames: cmd2 = 'certutil -hashfile {} MD5'.format(item) fp2 = os.popen(cmd2) item_md5 = fp2.read().split('\n')[1] if test1_md5 == item_md5: print('{}和test1.txt内容相同'.format(item)) else: print('{}和test1.txt内容不同'.format(item))fp1.close()fp2.close()
输出:
test2.txt和test1.txt内容不同test1_copy.txt和test1.txt内容相同
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~