学习笔记,有错必纠


管道

大部分操作系统都提供了命令行接口,也称为字符界面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    <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.py14 个文件          6,977 字节2 个目录 14,654,345,216 可用字节

我们也可以计算文件的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 89
CertUtil: -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 = 0
while True:count += 1res = 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内容相同

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

  1. python观察日志(part22)--设置工作目录及文件读取

    学习笔记,仅供参考 参考自:pandas.read_csv参数详解:<python编程从数据分析到数据编程> 查看并更改当前工作目录 当前工作目录就是python(准确的说,是python ...

  2. python观察日志(part18)--遍历文件夹下文件并判断后缀

    学习笔记,仅供参考 import ospath = r"F:\MyStudio\PythonStudio\goatbishop.project01\MyNewWork" fileN ...

  3. python观察日志(part9)--数据库与pickle模块

    学习笔记,有错必纠 数据库 数据库是一个有组织的用于存储数据的文件,许多数据库都像字典一样组织数据,因为它也将键映射到值上,数据库和字典之间最大的区别是数据库是保存在磁盘上的(或者其他永久存储上),所 ...

  4. python观察日志(part28)--数据的加载与存储

    学习笔记,仅供参考,有错必究 参考文献:编码问题:UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb3 in position; 数据的加载 ...

  5. python观察日志(part24)--列表和numpy数组扁平化

    学习笔记,仅供参考,有错必究 参考文献:python–列表.数组扁平化:你知道如何将python中嵌套的列表扁平化吗? 列表扁平化 方案1 print(sum([[1, 2, 3], ["s ...

  6. python观察日志(part21)--ord,chr,unichr方法的联系与区别

    学习笔记,仅供参考,有错必纠 参考自:python 的 ord(). chr(). unichr() 函数; 菜鸟教程 ord,chr,unichr方法的联系与区别 ord方法 ord方法以一个长度为 ...

  7. python观察日志(part20)--列表中加号,extend,append之间的区别

    学习笔记,仅供参考,有错必纠 列表中"+"加号,extend,append之间的区别 extend extend函数用于在列表末尾一次性追加另一个序列中的多个值. append a ...

  8. python观察日志(part15)--命名元祖namedtuple

    学习笔记,有错必纠 命名元祖namedtuple 有很多简单的对象其实可以看做几个相关值的集合,例如,在下面这段代码中,我们定义Point类,它包含两个数字x和y: class Point:def _ ...

  9. python观察日志(part13)--any和all

    学习笔记,有错必纠 any和all any函数 python提供一个内置函数any,它接收一个由布尔值组成的序列,并在其中任何值是True时返回True. 它可以用于列表: >>> ...

最新文章

  1. 剑指offer一:二维数组中的查找
  2. ubantu14下vim的配置...
  3. 扫地机器人腿是咕噜_扫地机器人|如何避免买到“智障”,看这篇
  4. 保留IP地址(特殊IP地址)
  5. git schnnel failed to receive handshake, SSLTLS connection failed
  6. 使用SAP OData服务创建销售订单
  7. IOT(Index Organized Table)
  8. Linux性能监控-Top
  9. 【registry】registry合并带spring boot项目第一弹
  10. arcMap安装教程
  11. 【51单片机】SG90舵机控制
  12. 如今表情包的天下,曾经可是颜文字和Emoji的啊...
  13. sshv2 mitm工具jmitm2的使用记录
  14. Oracle Parallel使用方法
  15. id门禁卡复制到手机_门禁卡复制到手机苹果
  16. Oracle19c数据库下载及安装步骤(详细)以及连接Navicat和PLSql
  17. 7-36 大炮打蚊子(15 分)
  18. 关于c++取绝对值的方法
  19. RabbitMQ系列随笔
  20. Electron 使用Pepper Flash插件

热门文章

  1. debian/ubuntu19.10下安装使用护眼软件f.lux
  2. 实战例子_Pytorch官方力荐新书《Pytorch深度学习实战指南》pdf及代码分享
  3. 全国计算机等级考试收费不一样,2018年北京全国计算机等级考试收费标准
  4. Oracle简单常用的数据泵导出导入(expdp/impdp)命令举例(下)
  5. 洛谷P2863 [USACO06JAN]牛的舞会The Cow Prom
  6. 计算机网络原理笔记-简单邮件传输协议
  7. [转] C# TextBox、DataGrideView中的数据绑定
  8. 云计算虚拟化技术会是企业安全黑洞?
  9. IOS 手机助手及越狱助手推荐
  10. Beginning SDL 2.0(4) YUV加载及渲染