当前位置 : 主页 > 编程语言 > python >

python观察日志(part11)--管道及MD5文件比较

来源:互联网 收集:自由互联 发布时间:2022-06-15
学习笔记,有错必纠 管道 大部分操作系统都提供了命令行接口,也称为字符界面shell,字符界面通常会提供命令来浏览文件系统和启动应用程序,例如,在windows中,可以使用cd来更换目

学习笔记,有错必纠


管道



大部分操作系统都提供了命令行接口,也称为字符界面shell,字符界面通常会提供命令来浏览文件系统和启动应用程序,例如,在windows中,可以使用cd来更换目录,敲入python来启动python。任何在字符界而能启动的程序,都可以在python中使用管道对象来启动。



python实现



我们可以利用​​os.popen​​​来显示当前工作目录下的内容,并使用​​read​​一次读取所有输出:

import os

cmd1 = 'dir'
fp = os.popen(cmd1)
res = fp.read()
print(res)

部分输出:

2020/05/17 09:57 <DIR> .
2020/05/17 09:57 <DIR> ..
2020/05/17 09:57 330 dbm_study.py
2020/05/17 09:57 3,113 find_duplicates.py
2020/05/15 12:37 603 koch.py
2020/05/15 11:25 260 mypolygon.py
2020/05/15 15:18 349 my_factorial.py
2020/05/15 16:21 356 NewtonMethod.py
2020/05/16 22:33 109 os_study.py
2020/05/16 23:39 221 pickle_study.py
2020/05/17 09:57 100 popen_study.py
2020/05/16 12:45 529 ReverseLookup.py
2020/05/16 23:14 43 testdatabase.bak
2020/05/16 23:14 526 testdatabase.dat
2020/05/17 09:05 43 testdatabase.dir
2020/05/16 22:05 395 tuple01.py
14 个文件 6,977 字节
2 个目录 14,654,345,216 可用字节



我们也可以计算文件的MD5码:

import os

cmd2 = '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 89
CertUtil: -hashfile 命令成功完成。

MD5值简介

MD5的全称是Message-Digest Algorithm 5,它一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于来确保信息传输完整一致。

MD5值等同于文件的ID,它的值是唯一的。 如果文件已被修改(例如嵌入式病毒,特洛伊木马等),其MD5值将发生变化。 因此,一些常规下载URL提供文件MD并且通常提供MD5值。 如果用户在下载后发现他们的MD5值与网站公告不一致,可能是文件被修改过或者下载出错。


当然,我们也可使用readline一行一行的读取:

import os

cmd2 = 'certutil -hashfile os_study.py MD5'
fp = os.popen(cmd2)

count = 0
while 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 os


cmd1 = '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内容相同


上一篇:python观察日志(part14)--计数器Count
下一篇:没有了
网友评论