设为首页 收藏本站
查看: 914|回复: 0

[经验分享] python 之一次低级错误的推导

[复制链接]

尚未签到

发表于 2017-5-5 06:40:18 | 显示全部楼层 |阅读模式
  

 写一个小工具,用途是从CDN和samba上下载两批文件,然后对比两批文件的MD5值,以确定上传到CDN的文件是不是确实是samba上的。

  编程结束,测试发现,24个文件总有固定的3个文件比对MD5值失败。重复多次均是这3个文件比对失败。然后用MD5小工具单独比对出错文件时,两边的MD5又一样。所以怀疑下载好的文件是正确的,MD5加密算法有问题。
  MD5算法是采用分块计算每个块生成str1,然后再计算str1的MD5的方式。又怀疑是用了stringIO导致读取文件时读取的缓存不对,所以将StingIO去掉换成变量赋值的方式,现象依旧。
  没办法只好将第一次计算MD5的字符串和第二次计算MD5的字符串分别打印出来比对,发现只有最后一块计算出来的MD5值不正确,前两块计算出的MD5值正确。那么说明算法没有问题,是最后一个块读取出的数据的问题。
  怎么确定最后的数据哪里不一致呢?一开始以为是读的时候没有正确的发现EOF标志,所以又加日志,在计算最后一块数据的MD5时,输出当前计算的数据到文件。比对情况如下图
  
DSC0000.png
  DSC0001.png

  发现最后一块数据的最后几百个字节没有读出来,这三个出错文件均是这种情况。不解,所以又在读取完每一块的时候输出当前的游标值。
  
DSC0002.png
 

  发现果然你妹的没有把最后一块数据读完全就去计算MD5了有木有!!又尝试着运行了一遍最初的代码,发现出错的文件变成另外三个了,并且将整个计算MD5的文件拷贝出来单独调用计算,没有问题!!这说明还是跟下载有关。
  在将计算MD5值的函数单独出来调用时,不小心发现,在从samba server下载文件的时候,脚本已经运行完毕了,但是下载的文件有个别的仍然被脚本shell占用着,并且文件大小是上图中的9478144bytes。当关闭脚本shell后,变成了真正的大小9481600bytes!!这不就清楚了么。
  真相只有一个!
  那就是我在从samba server下载文件后没有手动关闭文件,这样做的结果是,系统会帮你关掉一部分可以关掉的文件,但是有一部分恰巧被shell占用了,没有成功关掉的,那么就会继续被shell占用着,如下图
   DSC0003.png
  
DSC0004.png
 
  总结:警惕这种低级错误,警惕一个脚本写一个礼拜,中间断断续续的结果就是你以为你写进去了,但实际你没有写进去,犯了唯物主义错误。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-373120-1-1.html 上篇帖子: python时间处理:datetime,time,calendar 下篇帖子: python用mysqldb时查询缓冲问题
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表