Python Linux加油站 http://blog.okbase.net/Python_lover 五个python常用运维脚本面试题实例 http://blog.okbase.net/Python_lover/archive/56720.html Python_lover 2018/8/5 20:27:37 来源:马哥教育

原文作者:chengxuyuan 

链接:https://mp.weixin.qq.com/s/nahDVL6aiMQ2vp85wo6nNw

一、用Python写一个列举当前目录以及所有子目录下的文件,并打印出绝对路径

#!/usr/bin/env python

import os

for root,dirs,files in os.walk('/tmp'):

    for name in files:

        print (os.path.join(root,name))

os.walk()

原型为:os.walk(top, topdown=True, onerror=None, followlinks=False)

我们一般只使用第一个参数。(topdown指明遍历的顺序)

该方法对于每个目录返回一个三元组,(dirpath, dirnames, filenames)。

第一个是路径,第二个是路径下面的目录,第三个是路径下面的非目录(对于windows来说也就是文件)

 

二、写程序打印三角形

#!/usr/bin/env python

input = int(raw_input('input number:'))

for i in range(input):

    for j in range(i):

        print '*',

    print '\n'

 

三、猜数器

程序随机生成一个个位数字,然后等待用户输入,输入数字和生成数字相同则视为成功。成功则打印三角形。失败则重新输入(提示:随机数函数:random)

#!/usr/bin/env python

import random

while True:

    input = int(raw_input('input number:'))

    random_num = random.randint(1, 10)

    print input,random_num

    if input == random_num:

        for i in range(input):

            for j in range(i):

                print '*',

            print '\n'

    else:

        print 'please input number again'

 

四、生成磁盘使用情况的日志文件

#!/usr/bin/env python

#!coding=utf-8

import time

import os

new_time = time.strftime('%Y-%m-%d')

disk_status = os.popen('df -h').readlines()

str1 = ''.join(disk_status)

f = file(new_time+'.log','w')

f.write('%s' % str1)

f.flush()

f.close()

 

五、统计出每个IP的访问量有多少?(从日志文件中查找)

#!/usr/bin/env python

#!coding=utf-8

list = []

f = file('/tmp/1.log')

str1 = f.readlines() 

f.close() 

for i in str1:

    ip =  i.split()[0]

    list.append(ip) 

list_num = set(list)

for j in list_num: 

    num = list.count(j) 

    print '%s : %s' %(j,num)

]]>
Python 之父谈放弃 Python:我对核心成员们失望至极! http://blog.okbase.net/Python_lover/archive/56719.html Python_lover 2018/8/4 23:01:55  

 来源:马哥教育

链接:https://mp.weixin.qq.com/s/L7xC2INCJUqAoQSN1ZyHdg

Python 之父讲述退位原因,以及 Python 的未来将何去何从。

 

在 Python 社区,Python 的发明者 Guido Van Rossum 被称为 “仁慈的终生独裁者”(BDFL,Benevolent Dictator for Life)。今年 7 月 12 日的时候他突然宣布退位了。

消息一出,一时间震惊了整个 Python 世界。当时他以 PEP 572 改进提案的争吵事件为例,表明其退出缘由。

Guido van Rossum 于 1990 年发明 Python,他相信 Python 这门语言即使少了他的领导也依然能持续发光发热。现年 62 岁的 van Rossum 是一名 Dropbox 的首席工程师,近日他接受了外媒 InfoWorld 的采访。

 

你为什么辞去 BDFL 职务?

van Rossum所谓的终生和独裁都仅仅是玩笑。实际上,最近十年,退休的念头都在我脑海里徘徊。

我年龄已经不小了,身体也有一些问题。作为 Python 社区的主要负责人,我需要一遍又一遍地去教社区的其他成员如何开展工作,同时需要一遍又一遍地向 Python 新人解释 Python 的语言哲学,这样超负荷的工作让我的健康状况更为恶化。

事情的引爆点在于一个颇具争议的 Python 改进提案(PEP 572),当我接受这个提案之后,Twitter 等社交媒体上出现了一些中伤我的评论。而更为心寒的是,这些评论居然大多来自 Python 的核心成员,我对他们失望至极!

 

你能谈谈 PEP 572 提案的好处以及它为什么如此充满争议吗?

van Rossum该提案提出了一种新的语法,它允许表达式内赋值。总得来说,这是对 Python 语言的一个小补充。开发人员如果需要的话,可以在表达式中进行赋值。

很多编程语言都有这个小功能,比如我熟悉的 C 和 C++。据我所知,Java 和 JavaScript 也支持。它是一种相当小的语法,但在某些情况下,它可以让代码编写变得更容易,并且通过删除冗余能够提升代码的可读性。

很多人觉得自己熟知 Python 的设计理念,他们认为该提案没有遵循 Python 的设计原则。该提案引发争议的另一个原因在于其作者自己的失误,之前几个版本就存在一些严重的问题,因此这一次,即使之前认同其基本理念的人也投了反对票。但这只是一个轻微的句法变化,并不激进。

 

该特性将包含在哪个版本的 Python 中?

van Rossum它将出现在 Python 3.8 中。

Python 3.8 将于一年半后发布。此前我们曾发文探讨过为何 Python 的速度如此之慢,在这一更新版本中,Python 3 启动慢的问题将会是 CPython 核心团队主要解决的问题之一。

 

会有一个新的 BDFL 吗? Python 后续将如何管理?

van Rossum很抱歉,目前确实无可奉告。

实际上,我给核心开发团体(拥有提交权限的 100 多人)指定了一项任务,让他们思考今后的管理模式并选出新的负责人。他们在解决 Python 问题的同时,需要认真完成该任务。这可能需要长期讨论,短期内很难达成共识。

令我高兴的是他们欣然接受了这个任务,并制定了任务进度表。

他们会在 2018 年 10 月 1 日前完成提案的收集。然后,在 2018 年 11 月 1 日前,他们会从众多提案中选出最终的管理方案。然后到 2019 年 1 月 1 日,他们会整理好管理方案的相关文件,并选举或者任命新的负责人。

如果有提案指出需要 BDFL,则该提案必须对其详细说明,比如如何选举 BDFL,BDFL 任职时长,以及 BDFL 的弹劾机制。我想最快 10 月 1 日,最晚明年 1 月 1 日,将会产生一名新的 BDFL。

 

Python 的核心成员都有谁?

van Rossum:Python 的核心成员有很多。

比如 Brett Cannon,他是一位真正的大神。又如 Tim Peters,作为我的良师益友,他提出了“Python 之禅”,生动地诠释了 Python 的编程哲学。另外,Barry Warsaw 也是核心开发人员之一。

 

未来你将在 Python 项目中担任怎样的角色?

van Rossum:我将成为一名普通的贡献者或者核心开发者。偶尔会编写或者审查代码。此外,我将尝试专注于核心开发人员的指导工作上,尤其是新的核心开发人员、女性或者少数民族人士。

因为我个人很推崇核心开发人员的多样性。

 

作为曾经的 BDFL,你觉得自己的离开会不会吓跑一些 Python 爱好者?

van Rossum:我认为不至于。Python 社区非常健康,Python 核心团队非常强大且充满活力。我相信他们能够克服这点小困难,并在未来几十年里继续推动 Python 前进,如果连这点自信都没有,我也不会辞职。尽管事已至此,但这只是一个小变故,我对 Python 的未来满怀信心。

 

Python 在过去几年的开发流程是怎样的?你如何看待它未来的发展?

van Rossum:很明显,在过去几年 Python 语言发生了显著的变化。我们为语言和库新增了一些特性,最大的变化可能在于其流行度的剧增。大约五年前,Python 都还是一门非常小众的编程语言。

也正是从五年前开始,随着数据科学的兴起,Python 有幸成为其主要工具,得以广泛流行。这也导致核心开发人员的决策压力剧增,但是总得来说,我们开发和发布的方式都非常稳定。

我们有负责发布的管理人员,主要版本的发布周期大约一年半。对于修复 bug 的版本,根据具体情况,其间隔时间可能是几个月到大半年不等。

我们有非常稳定的 Python 改进提案流程,也许随着社交媒体的发展 PEP 的方式有所改变。但总得来说,除了几年前从 Mercurial 转向 Git 之外,PEP 的流程一直非常稳定,没有出现过问题。

英文:Guido van Rossum resigns: What’s next for Python 链接:https://www.infoworld.com/article/3292936/python/guido-van-rossum-resigns-whats-next-for-python.html 

作者:Paul Krill 是 InfoWorld 的特约编辑,专注于桌面和移动端的应用开发,以及 Web 技术,比如 HTML5、Java、Flash。 

译者:安翔,责编:郭芮

 

]]>
Python学习----小白成长必备路线图 http://blog.okbase.net/Python_lover/archive/56718.html Python_lover 2018/8/4 20:14:18

来源:马哥教育

链接:www.magedu.com

马哥教育历经近十年发展,以“匠心精神,良心教育”为宗旨,以国际“MVP”体系为标准,培养了数万名资深、专业的高端IT人才,80%以上学员在互联网排名前300的企业高薪就业,拥有Linux运维、Python开发、云计算等多个高端学科。凭借马哥教育职业IT培训的高品质和毕业学员的良好口碑,其已经成为业内知名互联网公司重要人才战略合作伙伴,获得了百度、腾讯、阿里、中兴、科大讯飞、大众点评、51CTO、唯品会、京东、中国移动、 新浪、红帽等互联网巨头的人才合作支持,2013年成为51CTO官方推荐合作机构,与多家IT互联网企业签订专项人才培养计划,毕业学员平均薪资达10K以上。

我们将让您从0基础的小白一步步变成:自动化运维工程师、数据挖掘工程师、全栈开发工程师。

Python是创始人吉多·范罗苏姆(Guido van Rossum)在1989年圣诞节期间,在阿姆斯特丹,为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,而在给自己新创造的计算机语言起名字的时候,由于其是,自于七十年代风靡全球的英国六人喜剧团体,巨蟒剧团(Monty Python)的忠实粉丝,所以,就把此计算机语言的名字叫做:Python。

Python是一种脚本语言。脚本,对应的英文是:script。普通人,看到script这个英文单词,或许想到的更多的是:电影的剧本,就是一段段的脚本,所组成的电影剧本的脚本,决定了电影中的人和物,都做哪些事情,怎么做。而计算机中的脚本,决定了计算机中的操作系统和各种软件工具,要做哪些事情,以及具体怎么做。其实,脚本这个词还有另外一种感觉:随性因为,现实中,写电影脚本,那直接拿张纸和笔,就可以写了,写完了,就可以拿去用,拿去拍电影了而计算机中的脚本,其实就是普通的文本,就是写到文本文件中的代码而已,其也是有随性这个特点,写完了,直接就可以(在某种具有解释功能的环境中)运行了比如:Linux中的shell脚本,就是直接弄个文本文件,写上shell脚本代码,然后保存文件,然后就可以,在Linux的Shell这个带有shell的解释功能的shell环境中,运行了与此相对的,不那么随性的是:其他的,非脚本语言,常叫做编译性语言,比如C语言,往往都是需要额外加上编译这个步骤,才能执行的。

Python拥有功能丰富的自带的库以及种类和数量繁多且强大的第三方库,除了本身Python语言本身自带的标准库之外由于Python语言本身很好用,促使很多其他人,前前后后,写了N多个库积累至今,就成了:Python拥有数量巨大的,各种各样的,功能强大的,第三方的库函数。此特点,对于Python语言的使用者来说,有着显而易见的好处:当你去实现很多各种功能的时候,往往不需要重复造轮子,往往是可以找到,现成的,已有的,内置Python库,或第三方的Python的库,去帮你实现你要的功能换句话说:你去实现一个复杂的功能的时候,往往变成了,找到合适的库,并使用,即可。与此相对的,用其他语言去实现同样的功能的时候,由于缺少好用的库,而使得你需要重头到尾,全新的实现对应的功能所需的代码。由此对比出,Python的好用和强大。许多大型网站就是用Python开发的,例如YouTube、Instagram,还有国内的豆瓣。很多大公司,包括Google、Yahoo等,甚至NASA(美国航空航天局)都大量地使用Python。

当然Python也有它的缺点,最大的缺点就是性能,这也是为什么python在年近30岁的时候才火起来的原因,因为Python解释性语言都是需要翻译的,这个过程比较浪费时间,在以前计算机硬件性能低下的情况下,都是靠计算机语言的高性能来提高效率的,不过在现在计算机的硬件速度已经非常快了,硬件的性能问题已经不是瓶颈,而要处理大数据和类似人工智能等的超复杂的算法成立程序员编程的瓶颈,所以Python以其简介的语言风格和强大的第三方库能够节省程序员很多操作和步骤,使Python大放异彩。

 

]]>
linux哪家好,权威Linux专家给你推荐 http://blog.okbase.net/Python_lover/archive/56717.html Python_lover 2018/8/4 19:25:17 链接:www.magedu.com

很有幸能够参加到马帮,因为这天还要工作,所以就没有到教室去,只是当天晚上看了开课的视频。马老师(我习惯于这么叫他,因为他的确是我的大学老师)风采依旧,而且还是那么的脱俗。看过很多做计算机培训的机构很少有像马老师这样讲课吐字清晰,发音标准的人很少,甚至有些人认为只要技术精湛说方言好像更加的了不起。但我始终认为作为一名教育工作者具有一口流利标准的普通话是必要的基础条件,方言可以说但不可以用来讲课,更不应该不以为耻反以为荣。这也是我选择马哥教育的一个重要因素。

因为是课堂的环境准备所以这一天就没有太多与Linux相关的实质性内容,主要是讲解了一下FTP上各文件夹的作用,上课的纪律等日常学习的注意事项,不再赘举。其中马老师依然讲述了百谈不厌的王国维的人生三境界,以激励我们好好学习不可放弃。而令我非常感兴趣的是马老师提到了一个名叫“王守仁”的人,这个人我是很崇拜的,原因与大多数人应该相同就是读了一本名叫《明朝那些事儿》的书。这位可以说是距离我们最近的一位圣人了,他被当年明月推崇为明朝第一人,是中华史上为数极少的达到“立德”、“立功”、“立言”三不朽境界的人之一,马老师通过王守仁“知行合一”的理论告诉我们要坚持,对于大多数人来讲我们还没有到达靠拼智商来战胜对手的层次,所以这也就是这些年情商得到重视的原因,而持之以恒正是情商高的一个重要表现。马老师也提到了多读书,当然这个“书”是指博览群书,我一向认同“书无禁忌”的说法,不管好的坏的都应该去尝试着读一下(当然是指成年人)。

马老师还提到一个浅尝辄止的问题,对我来说绝对是一语中的了,之前的学习可以说都是不求甚解的,以至于自己成了一个“煎饼型人才”,所以从现在开始我要打造自己的深度,完成自我的突破,加油,加油!

众所周知,写博客是马哥教育的传统,仅以此篇作为我的开篇吧,监督自己坚持把以后的博客写下去。

 

]]>
恭喜终于找到心仪的工作 http://blog.okbase.net/Python_lover/archive/56716.html Python_lover 2018/8/4 17:30:47 来上海半个月了,优哉游哉的找了5天的工作之后,终于找到了自己心仪已久,准备已久的公司:上海XX科技有限公司。不亏我4个月的辛苦学习啊。

这算是进了外企了吧~首先表示压力很大!毕竟是外企,大家都是各种流利的英语+中英结合的表达方式。以及公司的每一个人都是精英,每一个人都是整个团队中不可或缺的一部分。而我,一个对于他们来说还属于初出茅庐的小伙子,在公司的技术部中,真如白纸一般准备着在上面补充各种新的血液!

不过外企也有外企的好处,那就是福利好~,除了一到公司之后就给我提供了一个全新的mac之外,还有各种小办公用品,以及密码储物盒之类的。而且除了中午的餐补,下午上班前公司还每人提供水果一只~~确保下午能够精力充沛的工作~(对了,这里吐槽一下……电脑的工作环境是全英文的!虽然英语不是很好,但是咱学了Linux在英文操作方面没什么问题……好好学英语吧童鞋们!!)而且由于是游戏公司,那么玩游戏也成了公司上上下下的必备知识,所以公司里除了有常规的休息室,厨房,赏景餐厅之外,还有游戏娱乐室!各种Xbox360,Wii啊之类的电视游戏机~~嗯!每当有新游戏发售的时候,大家都会积极去玩,然后快速的上手并通关,写出游戏的心得报告之类的,以便于公司内部游戏的开发和取长补短。

当然,公司的工作气氛和环境都非常的优秀~除了整个工作环境下禁烟之外,大家都是团队的一份子,也都为了团队的共同目标努力,所以在整个职责的划分上非常明晰,但是在职务的界限上却非常模糊,很少有什么因为我是你的上级而你必须非常的尊重我之类的(当然也不是就可以不尊重……)。大家不管是哪个部门的,互相之间都能快速的打成一片!嗯~这种工作气氛对于我来说自身非常喜欢!嗯,说个小插曲~公司的新入门员工要经历一个考验,那就是快速记住公司里相关部门的每一个员工的名字(15人+),在记他们名字的时候,他们只会告诉你一次正确的名字,之后的所有交流他们都会想方设法的让你混淆,让你混乱。当你有一个人名没有记住的时候……哼哼!等着“死”吧~哇哈哈!!!

Emmm,最后感谢一下马哥教育吧,也不算是打广告,或者说我觉得别人给了我们帮助我帮别人打下广告也是知恩图报吧,在马哥那里四个月的学习真不是盖的,只要好好学习是能学到很多真本事的,马哥讲课非常详细和容易理解,能够把晦涩难懂的理论讲的浅显有趣,张sir的实践培训也是非常的切合实际,面试的时候和来了之后上手都很有用,大家要是想学习运维我以自己的亲身经历推荐马哥~

]]>
Linux学习----在Linux环境下如何使用XFS文件系统 http://blog.okbase.net/Python_lover/archive/56715.html Python_lover 2018/8/3 20:42:33 来源:马哥教育

链接:https://mp.weixin.qq.com/s/UupllldADYE0sHbRs0uouQ

XfS文件系统是SGI开发的高级日志文件系统,XFS极具伸缩性,非常健壮。所幸的是SGI将其移植到了Linux系统中。在linux环境下。目前版本可用的最新XFS文件系统的为1.2版本,可以很好地工作在2.4核心下。

XFS文件系统简介

主要特性包括以下几点:

数据完全性

采用XFS文件系统,当意想不到的宕机发生后,首先,由于文件系统开启了日志功能,所以你磁盘上的文件不再会意外宕机而遭到破坏了。不论目前文件系统上存储的文件与数据有多少,文件系统都可以根据所记录的日志在很短的时间内迅速恢复磁盘文件内容。

传输特性

XFS文件系统采用优化算法,日志记录对整体文件操作影响非常小。XFS查询与分配存储空间非常快。xfs文件系统能连续提供快速的反应时间。笔者曾经对XFS、JFS、Ext3、ReiserFS文件系统进行过测试,XFS文件文件系统的性能表现相当出众。

可扩展性

XFS 是一个全64-bit的文件系统,它可以支持上百万T字节的存储空间。对特大文件及小尺寸文件的支持都表现出众,支持特大数量的目录。最大可支持的文件大小为263 = 9 x 1018 = 9 exabytes,最大文件系统尺寸为18 exabytes。

XFS使用高的表结构(B+树),保证了文件系统可以快速搜索与快速空间分配。XFS能够持续提供高速操作,文件系统的性能不受目录中目录及文件数量的限制。

传输带宽

XFS 能以接近裸设备I/O的性能存储数据。在单个文件系统的测试中,其吞吐量最高可达7GB每秒,对单个文件的读写操作,其吞吐量可达4GB每秒。

XFS文件系统的使用

下载与编译内核

下载相应版本的内核补丁,解压补丁软件包,对系统核心打补丁

下载地址:ftp://oss.sgi.com/projects/xfs/d … .4.18-all.patch.bz2

对核心打补丁,下载解压后,得到一个文件:xfs-1.1-2.4.18-all.patch文件。

对核心进行修补如下:

# cd /usr/src/linux

# patch -p1 < /path/to/xfs-1.1-2.4.18-all.patch

修补工作完成后,下一步要进行的工作是编译核心,将XFS编译进Linux核心可中。

首先运行以下命令,选择核心支持XFS文件系统:

#make menuconfig

在“文件系统“菜单中选择:

<*> SGI XFS filesystem support ##说明:将XFS文件系统的支持编译进核心或 SGI XFS filesystem support ##说明:以动态加载模块的方式支持XFS文件系统

另外还有两个选择:

Enable XFS DMAPI ##说明:对磁盘管理的API,存储管理应用程序使用

Enable XFS Quota ##说明:支持配合Quota对用户使用磁盘空间大小管理

完成以上工作后,退出并保存核心选择配置

之后,然后编译内核,安装核心:

#make bzImage

#make module

#make module_install

#make install

如果你对以上复杂繁琐的工作没有耐心或没有把握,那么可以直接从SGI的站点上下载已经打好补丁的核心,其版本为2.4.18。它是一个rpm软件包,你只要简单地安装即可。SGI提交的核心有两种,分别供smp及单处理器的机器使用。

创建XFS文件系统

完成对核心的编译后,还应下载与之配套的XFSprogs工具软件包,也即mkfs.xfs工具。不然我们无法完成对分区的格式化:即无法将一个分区格式化成XFS文件系统的格式。要下载的软件包名称:xfsprogs-2.0.3。

将所下载的XFSProgs工具解压,安装,mkfs.xfs自动安装在/sbin目录下。

#tar –xvf xfsprogs-2.0.3.src.tar.gz

#cd xfsprogs-2.0.3src

#./configure

#make

#make install

使用mkfs.xfs格式化磁盘为xfs文件系统,方法如下:

# /sbin/mkfs.xfs /dev/sda6 #说明:将分区格式化为xfs文件系统,以下为显示内容:

meta-data=/dev/sda6 isize=256 agcount=8, agsize=128017 blks

data = bsize=4096 blocks=1024135, imaxpct=25

= sunit=0 swidth=0 blks, unwritten=0

naming =version 2 bsize=4096

log =internal log bsize=4096 blocks=1200

realtime =none extsz=65536 blocks=0, rtextents=0

格式化磁盘时,如果mkfs.xfs提示你分区原本已被格式化为其它文件系统,可以使用参数 –f 强行格式化:

#/sbin/mkfs.xfs –f /dev/sda6

加载XFS文件系统

#mount –t xfs /dev/sda6 /xfs

其中/xfs是主分区/下的一个目录。

最后,为了让系统启动后就自动加载,应该更改/etc/fstab,这样系统启动后就会自动加载xfs分区而不必每次都手工加载。

要说明的一点是目前的xfs由于受linux内存页限制,在x86版本中,只能实现文件系统的块尺寸为4K。另外,XFS文件系统可以不同的方式 mount,即允许文件系统以读方式加载,也允许以读写方式加载。这是因为xfs文件系统用作根文件系统时,为了安全要以只读方式加载。

文件系统的迁移

要使得系统中的其它分区使用XFS文件系统,还有一步是迁移文件系统。建议在迁移文件系统时,首先将磁盘上的数据、文件先备份,以免发生不可挽回的损失,在进行文件系统转换之间,最好能将整个系统进行完全备份。这一步有很多种方法,本文仅就笔者的迁移方法加以描述。各位可以按照自己习惯的方式去完成

如果你想得到一个纯的xfs系统(系统的所有文件系统均采用XFS文件系统)话,还得将根文件系统也格式化为xfs文件系统。这实际上是比较繁杂的一步。因为根文件系统不能被umount,所以,必须首先创建一个分区,其文件系统为ext2文件系统,然后将目前的根分区上的所有文件与目录,原原本本地复制到这一个分区,然后更改/etc/fstab文件,替换原来的根分区。

方法如下:

$ mkfs -t ext2 /dev/hda4

$ mkdir /mnt/temp

$ mount -t ext2 /dev/hda4 /mnt/temp

$ cd /

$ tar lcvf - .|(cd /mnt/temp; tar xpvf - )

以上操作是将根分区上的所有文件打包,复制到新建立的分区。当然,你也可以直接使用以下命令复制文件。

# cp –dpR / /mnt/temp

接着,将下次启动的根分区更改到/dev/hda4分区,更改/etc/fstab文件及/etc/lilo.conf ,然后,运行 lilo.

重新启动后,新的根分区就已经为/dev/hda4。

接下来,创建一个xfs文件系统的分区:

$ mkfs -t xfs /dev/hda2

加载此分区,采用两样的方法,将根分区的内容复制到此分区

$ mount -t xfs /dev/hda2 /mnt/temp

在根分区下,运行

$ cd /

$ tar lcvf - .|(cd /mnt/temp; tar xpvf - )

再次更改/etc/fstab、/etc/lilo.conf,用新建的xfs分区替换原来的ext2主分区。如下所示:

/dev/hda2 / xfs defaults 1 1

将新建的xfs分区用作根分区,保存以上设置。再次检查配置文件内容,确认无误后再重新启动系统。如果你的设置全部正确,那么系统成功启动后,你就拥有一个纯XFS文件系统的系统了。

 

]]>
Python自动化测试框架有哪些? http://blog.okbase.net/Python_lover/archive/56713.html Python_lover 2018/8/3 0:21:49 来源:马哥教育

链接:https://mp.weixin.qq.com/s/PvlaRmPmGc5b1XIMqMMslA

令开发者万分高兴的是,开发自己的测试框架的日子终于结束了。以前,开发团队接手一个项目并开始开发时,除了项目模块的实际开发之外,他们不得不为这个项目构建一个自动化测试框架。一个测试框架应该具有最佳的测试用例、假设(assumptions)、脚本和技术来运行每一处代码和模块,从而发现代码缺陷和不足。不同的项目需要不同的测试用例、假设和脚本,而这也是为什么会在这些开发中花费大量时间。

随着技术的进步和自动化技术的出现,市面上出现了一些自动化测试框架,你可以使用这些框架,在调整特定测试适用性和效率参数后,测试你项目的任何模块。这节省了时间,而且由于这些框架被广泛使用,它们非常稳健,具有广泛多样的用例集和技术来轻易发现微小的缺陷。今天,我们将看一看可用的Python自动化测试框架。

Robot Framework

Robot Framework是最流行的Python自动化测试框架。它是完全用Python开发的,对于验收测试非常有用。这个框架可以运行在Java和.NET环境。它还支持跨平台,例如Windows、MacOS和Linux。这个产品是由世界上一些著名的测试人员创建的,拥有关键词驱动方案。它有如此多可用的工具和库,使得这个框架非常先进和健壮。

它是一个开源框架,并且留有API扩展空间。表格式的测试数据语法和关键词驱动测试使得它在全球的测试人员中非常流行。它无疑是最易用的自动化测试框架,并且允许你进行并行测试。

RedwoodHQ

RedwoodHQ是一个流行的自动化测试工具,它的流行是由于大部分流行的编程语言都可以用来编写测试,例如Java、Python、C#和likewise。它有一个网站界面,在那里多个测试人员可以在一个平台上协作和运行测试用例。在RedwoodHQ中出现的action关键字可以用来毫不费力地创建和修改测试用例。你所需要做的只是找到你需要的action,将它拖到你的测试盒中,然后输入参数并改变它们的值来生成一份完整的测试报告。它有一个内置的IDE(集成开发环境),你可以在那里创建和修改测试用例,并且并行运行它们。它是对用户最友好或对测试人员最友好的平台之一,它关注一个重大项目的全部测试过程。

Jasmine

Jasmine对于JavaScript单元测试使用行为驱动开发框架。它适用于任何使用JavaScript的地方。除了JavaScript之外,它还被用于Python和Ruby自动化测试。因此,它使得你可以并行运行客户端测试用例和服务端测试用例。它是一个将客户端和服务端单元测试结合起来的完美的测试框架,而且被认为是测试领域的未来。它现成可用,除了需要一个名为Karma的测试运行器之外,不需要其它外部依赖。

Pytest

如果你的项目比较小、复杂度比较低,Pytest是最适合的自动化测试平台。非常多的Python开发者都喜欢它,他们大部分用它来进行单元测试。它也具有Robot Framework所闻名的验收测试能力。Pytest最好的特性之一是,它提供了测试用例的详细失败信息,使得开发者可以快速准确地改正问题。它兼容最新版本的Python。它还兼容unittest、doctest和nose,开箱即用。它还有包含更多功能的插件和多样化的现有测试技术和测试用例。事实上,有300多个可用插件来自它的活跃社区。该平台设计用于编写更简单错误率更小的代码。你可以将Pytest与诸如Selenium和Splinter之类的图形用户界面一起使用,来使得测试工作更轻松。

结论

对于任何编程语言来说,都没有绝对理想的测试框架。它取决于开发者的舒适度、项目需求和项目中特定模块所需的测试类型。可用的自动化测试框架有线性自动化、基于模块的测试、函数库框架测试、混合测试、关键词驱动和数据驱动测试等。每个框架都有它的优点和缺点。上面列举的python框架是性能最全面的自动化测试框架。

 

]]>
Linux 之父如何定义 Linux? http://blog.okbase.net/Python_lover/archive/56712.html Python_lover 2018/8/2 23:52:02 来源:马哥教育

链接:https://mp.weixin.qq.com/s/wwBt5H68tHmf_lHXrd_eSQ

本文是 Linus 写于 1991年10月10日

LINUX是什么?

LINUX是一个免费类unix内核,适用于386-AT计算机,附带完整源代码。主要让黑客、计算机科学学生使用,学习和享受。它大部分用C编写,但是一小部分是用gnu格式汇编,而且引导序列用的是因特尔086汇编语言。C代码是相对ANSI的,使用一些GNU增强特性(大多为 __asm__ 和 inline)。

然而有很多可用于386电脑的unices,他们大部分要花很多钱,而且不附带源码。因此他们是使用计算机的理想选择,但是如果你想了解他们如何工作,那是不可能的。

也有一些  Unix 是附带源码的。Minix,Andrew S. Tanenbaum编写的学习工具,已经在大学中作为教学工具使用了很多年了。BSD-386系统是附带源码的,但是有版权限制,而且要花很多钱(我记得起始价格为$995)。GNU内核(Hurd)将会是免费的,但是现在还没有准备好,而且对于了解和学习它们来说有点庞大。

LINUX与Minix是最相似的,由于它很小而且不是非常复杂,因此易于理解(嗯…)。LINUX是基于Minix编写的,因此有相当多的相同点,任何Minix黑客在使用LINUX的时候都感觉非常熟悉。不过,没有在项目中使用Minix代码,因此Minix版权没有限制到这个新系统。它也是完全免费的,而且它的版权非常宽松。因此不像使用Minix,它不需要几兆字节大小的区别。

LINUX版权

虽然是免费的发布版,我还是从以下几个方面限制了LINUX的使用:

你可以自由复制和重新发布源码和二进制,只要是:

  1. 完全开源。因此不能单独发布二进制,即使你只修改了一点。
  2. 你不能从发布版获取利益。事实上甚至“装卸费用”都是不被接受的。
  3. 你要保持完整的适当版权。
  • 根据需要你可能会修改源码,但是如果你发布了新系统的一部分(或者只有二进制),必须将新的代码包含进去。
  • 除了不包含版权的代码之外,你可能会做一些小的修改。这由你来定,但是如果能将相关内容或者代码告诉我,将不胜感激。

对任何使用或者扩展系统的人来说,这应该足够宽松而不会引起任何担忧。如果你有朋友真的不想要源码,只想要一个能运行的二进制,你当然可以给他而不用担心我会起诉你。不过最好只在朋友之间这么做。

LINUX运行所需的硬件/软件

LINUX是在一个运行Minix的386-AT上开发的。由于LINUX是一个真正的操作系统,而且需要直接与硬件交互来做一些事情,你必须有一个非常相似的系统来让他顺利运行:

  • 386-AT(PS/2之类是不同的,不能正常运行)
  • VGA或者EGA屏幕硬件。
  • 标准AT硬盘接口,IDE盘可以运行(实际上我用的就是这个)。
  • 正常实模式BIOS。一些机器看起来是用虚-86模式运行启动程序,而且在这样的机器LINUX不会启动和正常运行。

LINUX会发展成为一个自给自足的系统,现在需要Minix-386才能正常运行。你需要Minix让初始化启动文件系统,和编译OS二进制。在那之后LINUX是一个自给自足的系统,但是为了做文件系统检查(fsck)和修改之后重编译系统,推荐使用Minix。

获取LINUX

LINUX现在可以使用匿名ftp从‘nic.funet.fi’的‘/pub/OS/Linux’目录获取。这个目录包含操作系统的所有源码,还有一些二进制文件,因此你可以真正使用系统了。

注意!二进制大多是GNU软件,而且版权比LINUX的严格(GNU非盈利性版权)。因此你不能在不发布他们源码的情况下重新发布他们,可以在/pub/GNU中找到。关于GNU非盈利性版权,从任何GNU软件包了解更多。

此目录中各类文件如下:

  • linux-0.03.tar.Z–系统的完全源码,16位tar压缩文件格式。
  • Linux.tex–这个文件的LATEX源码。
  • bash.Z–在LINUX下运行的bash二进制文件。这个二进制文件应该放到预留给LINUX文件系统中的/bin/sh下(参见installation)。
  • update.Z–更新二进制文件,要放到/bin/update。
  • gccbin.tar.Z–GNU cc二进制文件需要由一个可运行的编译器。这个tar压缩包含有编译器,加载器,汇编程序和支持程序(nm,strip等)。它还包含一个小型的库,可用于大部分程序。
  • include.tar.Z–让gcc运行的必要include文件。
  • unistd.tar.Z–unistd库程序的源码(即系统调用接口)。通过这个你可以使用系统独立库源码编译一个大一些的库。
  • utilbin.tar.Z–各种GNU工具的二进制文件,包括GNU的fileutils,make和tar。也包含克隆emacs的uemacs。
  • README, RELNOTES-0.01, INSTALLATION–包含一些(有点过时的)LINUX相关的信息的ascii文件。

让系统运行的最少文件是OS源码和bash和更新二进制文件。不过只用这些,你做不了什么事。

安装

在你拿到了必要LINUX文件之后,你需要编译系统和创建root目录。必要的二进制文件需要放到root文件系统中。按如下操作:
1. 备份你的软件。虽然LINUX从没有毁坏过我的任何文件,但没有什么是必然的。安全胜过遗憾。
2. 选择/创建一个标准MinixHD-分区作为新的LINUX root文件系统。
3. 在新的root创建必要的设备节点。LINUX与Minix使用相同类型的节点,所以使用Minix的mknod命令创建下面的设备:节点号与在Minix中相同。

  • /dev/tty
  • /dev/tty[0-2]
  • /dev/hd[0-9]

4. 将必要文件放到新的root分区。文件应该放在下面目录中:
希望你现在有一个功能正常的unix,而且你已经root权限登录。LINUX现在没有‘init’过程,只要你注销,系统会同步并等待。使用三指键(Ctrl+Alt+Del)重启机器。

  • gcc
  • 添加链接到你选择的/usr/local/lib中的文件。我将ld,as,nm,strip和size链接到他们相应的 /usr/local/lib/gcc-XXX。
  • gccbin.tar.Z中的内容,除了gcc
  • include.tar.Z的内容
  • utilbin.tar.Z的内容
  • sh,即bash.Z
  • update
  • /bin:
  • /usr/bin:
  • /usr/include:
  • /usr/local/lib:
  • /usr/local/bin:
  • 编辑系统中的linux/include/linux/config.h。这个文件包含了针对于系统的信息:内存空间,硬盘类型,root分区号(同样的与Minix中的编号相同),键盘类型(现在只有US和Finnish)等。
  • 编译LINUX源码。一个简单技巧就可以完成,在你编辑makefiles为适合你的系统之后(即,删除-mstring-insnsflag,和修改适合你的路径。)1.40之前版本gcc的用户可能需要添加gnulib到makefile中‘LIBS=’一行。
  • 复制产生的镜像文件到软盘(即,cp Image /dev/PS0 或者之类的)。
  • 使用新的软盘重启。启动界面应该告诉你系统正在启动(加载系统…),然后是一些必要的文件系统信息(xxx/XXX inodes/blocks free),接下来是一个确定,还有bash提示(如果你没有.bashrc文件,则初始化bash#)。

LINUX 缺失/不兼容的东西

LINUX 是打算作为一个全部自给自足的内核,但现在并非如此。作为上面已经提到的,你需要 Minix 来设置启动设备并且检查文件系统当它运行起来的时候。这里有一些其它的不足之处:

硬件的不兼容。一些 AT 标准特性当前还没有支持。最值得注意的是软盘驱动,利用 LINUX 进行实际工作(备份 etc)当前是不可能的[译者:这个是 oldlinux,这个是 Linus Torvalds 1991 年 10 月写的文章,肯定当时是不行的]。还有串行连接的一些特性没有被实现(2400 bps 波特率的硬连接,没有挂断(hang-up)提示等等 )。

标准 c 库的不兼容。gcc 分发版的 libc.a 没有完成,我对免费可发布的库功能很感兴趣。

一些系统调用没有完全实现。这些设计绝大多数“极少调用”的特性比如调试(谁无论如何需要它的话,你的程序第一次是无法工作的:-))以及其它的特性。

如上所述,没有登陆和初始化进程。当前 LINUX 启动在单用户模式,以 root 作为控制台用户。对于一些移植工作足够了,但不是实际可用的。

387支持[译者:硬件浮点,当时 Intel 发布了外接式 FPU] 没有被实现,即使已有一些基础程序被提供出来。”nic.funet.fi” 的 gcc 二进制包使用软浮点(ie 仿真功能调用)来支持 4 个基础数学运算操作。387-支持将尽快实现当我的电脑安装了这个硬件。希望在一个月或者两个月。

现在还没有重要的系统管理命令实现在 LINUX 中。这些包括 mkfs, format, fsck, mknod 等。这些命令需要的内核特性还没有实现(format, mknod),一些命令只需要实现它。作为一个库,我欢迎任何免费分发文件。

如您所见,LINUX还不是一个完整的系统。 感谢您的帮助,使其变得更好。 我对为LINUX重写的Minix命令不感兴趣,除非你自己从头开始编写它们。 您当然可以免费(并鼓励)将您的Minix发行版中的所有内容用于您自己的LINUX系统,但由于Minix的版权,它们无法分发给更广泛的受众。

这里提到的一些问题将由我(即lines/387/floppy支持)尽快修复,但我希望得到库函数的支持。感谢你们提交的错误报告及补丁还有愿望清单,如果你真的有针对问题的补丁,我会立即尝试去修复它。 小的更改将作为补丁形式发送到邮件列表,并在nic.funet.fi'上设置,如果经过大量重写,或者修复大的补丁,整个系统将在nic.funet.fi’更新。

LINUX移植软件

LINUX被设计得让移植相对容易。因此,就有了完整的termios实现和一些POSIX库。我所移植的(诚然相对较少)程序没有任何问题。

尽管LINUX与Minix非常相似,但Minix程序通常并不会比为其他nuix设计的程序更容易移植。因此,我不建议从一个特定程序的Minix版本开始,而应该尝试从头开始移植‘’virgin‘’程序。比BSD更接近SYSV,这意味着当给定一个-DUSG或者-DSYSV标识时,大多数程序很容易移植。

移植过程中最困难的一点就是缺少库函数。这些必须由你来编写,或者从其他的来源复制(Minix可能是个有缘人)。另外,一些程序(特别是GNU)有各种各样的标识,这些标识可以定义哪些函数不可用(一旦在Makefile中添加了足够量的-DXXX_MISSING标识,GNU fileutils将编译的很好)。

已经移植的程序

下面这些程序已经移植到LINUX:

  • GNU cc (gcc, cc1, cpp)
  • GNU assembler (as386)
  • GNU binutils (ld, ar, nm, size, strip, ranlib)
  • GNU compress (16-bit)
  • GNU tar
  • GNU make
  • GNU bash (Bourne Again SHell)
  • GNU sed
  • GNU bison (yacc-lookalike)
  • GNU awk
  • GNU fileutils (ls, cp, rm, mkdir, rmdir, tail etc)
  • less
  • uemacs

所有上述程序都能在‘nic.funet.fi’(主要在’/pub/gnu’)中找到,大多数LIINUX-binaries都可以在‘/pub/OS/Linux’目录中找到。包括gcc(cc1)有一些我自己增强的功能,所有这些程序都在没有变化的情况下编译的。先尝试自己编译,遇到问题可以将差异或者资源发邮件给我。

另外,我提起过明确地GNU差异编译和运行。

技术帮助

LINUX目前有一个邮件列表,您可以通过邮件发送到这个地址订阅:Linux-activists-request@niksula.hut.fi ,并要求包括在列表中。然后你可以通过这个邮箱:Linux-activists@niksula.hut.fi 提问题,这将复制你的问题/答案/无论什么,并发送给列表中其他所有人。

请注意Linux-activists和Linux0activists-request的不同——第一个用于给列表中的所有人发送邮件,第二个仅用于订阅和取消订阅。

当然,您也可以直接发送邮件至 torvalds@kruuna.helsinki.fi。我会尽量在一两天内回答所有的问题。

尽管‘nic.funet.fi’可能会保持合理的更新状态,但是它还有些问题(即,我无法因为个人得到文件,但可以通过几个人)。因此,如果邮件列表上的人想要补丁或二进制文件,他们将会更快得到。

感谢

我要感谢学院…

说真的,如果没有其他人的帮助,这个系统将永远不会有曙光,甚至会变得更糟。Bruce Evans 帮助我找到了需要更改的位置,以便gcc能正确地处理浮点数,并提供许多有用的想法/建议(他的Minix-386用于构建系统)。此外,Earl Chew 的estdio包被用于标准的IO库。像这样更自由地分发包!

Alain W Black和Richard Tobin为Minix制作了gcc,没有它我就无法编译这个东西。GNU完成了我在Linux下使用的大部分程序。Alfred Leung发送了美国键盘补丁。

附:“感谢”wirzeniu@kruuna.helsinki.fi他的“建设性”批评和“诙谐”的评论。他是我第一个 alpha-测试者,他应该被授予勇气奖章。

 

Linus Torvalds (torvalds@kruuna.helsinki.fi)  1991年10月10日

 

英文:Linus Torvalds,翻译:开源中国

www.oschina.net/translate/linux-a-free-unix-386-kernel

]]>
Python学习干货 史上最全的 Python 爬虫工具列表大全 http://blog.okbase.net/Python_lover/archive/56711.html Python_lover 2018/8/2 22:30:21 来源:马哥教育

链接:https://mp.weixin.qq.com/s/UkXT20Oko6oYbeo7zavCNA

 

这个列表包含与网页抓取和数据处理的Python库。

网络

  • 通用
  • urllib -网络库(stdlib)。
  • requests -网络库。
  • grab – 网络库(基于pycurl)。
  • pycurl – 网络库(绑定libcurl)。
  • urllib3 – Python HTTP库,安全连接池、支持文件post、可用性高。
  • httplib2 – 网络库。
  • RoboBrowser – 一个简单的、极具Python风格的Python库,无需独立的浏览器即可浏览网页。
  • MechanicalSoup -一个与网站自动交互Python库。
  • mechanize -有状态、可编程的Web浏览库。
  • socket – 底层网络接口(stdlib)。
  • Unirest for Python – Unirest是一套可用于多种语言的轻量级的HTTP库。
  • hyper – Python的HTTP/2客户端。
  • PySocks – SocksiPy更新并积极维护的版本,包括错误修复和一些其他的特征。作为socket模块的直接替换。
  • 异步
  • treq – 类似于requests的API(基于twisted)。
  • aiohttp – asyncio的HTTP客户端/服务器(PEP-3156)。

网络爬虫框架

  • 功能齐全的爬虫
  • grab – 网络爬虫框架(基于pycurl/multicur)。
  • scrapy – 网络爬虫框架(基于twisted),不支持Python3。
  • pyspider – 一个强大的爬虫系统。
  • cola – 一个分布式爬虫框架。
  • 其他
  • portia – 基于Scrapy的可视化爬虫。
  • restkit – Python的HTTP资源工具包。它可以让你轻松地访问HTTP资源,并围绕它建立的对象。
  • demiurge – 基于PyQuery的爬虫微框架。

HTML/XML解析器

  • 通用
  • lxml – C语言编写高效HTML/ XML处理库。支持XPath。
  • cssselect – 解析DOM树和CSS选择器。
  • pyquery – 解析DOM树和jQuery选择器。
  • BeautifulSoup – 低效HTML/ XML处理库,纯Python实现。
  • html5lib – 根据WHATWG规范生成HTML/ XML文档的DOM。该规范被用在现在所有的浏览器上。
  • feedparser – 解析RSS/ATOM feeds。
  • MarkupSafe – 为XML/HTML/XHTML提供了安全转义的字符串。
  • xmltodict – 一个可以让你在处理XML时感觉像在处理JSON一样的Python模块。
  • xhtml2pdf – 将HTML/CSS转换为PDF。
  • untangle – 轻松实现将XML文件转换为Python对象。
  • 清理
  • Bleach – 清理HTML(需要html5lib)。
  • sanitize – 为混乱的数据世界带来清明。

文本处理

用于解析和操作简单文本的库。

  • 通用
  • difflib – (Python标准库)帮助进行差异化比较。
  • Levenshtein – 快速计算Levenshtein距离和字符串相似度。
  • fuzzywuzzy – 模糊字符串匹配。
  • esmre – 正则表达式加速器。
  • ftfy – 自动整理Unicode文本,减少碎片化。
  • 转换
  • unidecode – 将Unicode文本转为ASCII。
  • 字符编码
  • uniout – 打印可读字符,而不是被转义的字符串。
  • chardet – 兼容 Python的2/3的字符编码器。
  • xpinyin – 一个将中国汉字转为拼音的库。
  • pangu.py – 格式化文本中CJK和字母数字的间距。
  • Slug化
  • awesome-slugify – 一个可以保留unicode的Python slugify库。
  • python-slugify – 一个可以将Unicode转为ASCII的Python slugify库。
  • unicode-slugify – 一个可以将生成Unicode slugs的工具。
  • pytils – 处理俄语字符串的简单工具(包括pytils.translit.slugify)。
  • 通用解析器
  • PLY – lex和yacc解析工具的Python实现。
  • pyparsing – 一个通用框架的生成语法分析器。
  • 人的名字
  • python-nameparser -解析人的名字的组件。
  • 电话号码
  • phonenumbers -解析,格式化,存储和验证国际电话号码。
  • 用户代理字符串
  • python-user-agents – 浏览器用户代理的解析器。
  • HTTP Agent Parser – Python的HTTP代理分析器。

特定格式文件处理

解析和处理特定文本格式的库。

  • 通用
  • tablib – 一个把数据导出为XLS、CSV、JSON、YAML等格式的模块。
  • textract – 从各种文件中提取文本,比如 Word、PowerPoint、PDF等。
  • messytables – 解析混乱的表格数据的工具。
  • rows – 一个常用数据接口,支持的格式很多(目前支持CSV,HTML,XLS,TXT – 将来还会提供更多!)。
  • Office
  • python-docx – 读取,查询和修改的Microsoft Word2007/2008的docx文件。
  • xlwt / xlrd – 从Excel文件读取写入数据和格式信息。
  • XlsxWriter – 一个创建Excel.xlsx文件的Python模块。
  • xlwings – 一个BSD许可的库,可以很容易地在Excel中调用Python,反之亦然。
  • openpyxl – 一个用于读取和写入的Excel2010 XLSX/ XLSM/ xltx/ XLTM文件的库。
  • Marmir – 提取Python数据结构并将其转换为电子表格。
  • PDF
  • PDFMiner – 一个从PDF文档中提取信息的工具。
  • PyPDF2 – 一个能够分割、合并和转换PDF页面的库。
  • ReportLab – 允许快速创建丰富的PDF文档。
  • pdftables – 直接从PDF文件中提取表格。
  • Markdown
  • Python-Markdown – 一个用Python实现的John Gruber的Markdown。
  • Mistune – 速度最快,功能全面的Markdown纯Python解析器。
  • markdown2 – 一个完全用Python实现的快速的Markdown。
  • YAML
  • PyYAML – 一个Python的YAML解析器。
  • CSS
  • cssutils – 一个Python的CSS库。
  • ATOM/RSS
  • feedparser – 通用的feed解析器。
  • SQL
  • sqlparse – 一个非验证的SQL语句分析器。
  • HTTP
  • HTTP
  • http-parser – C语言实现的HTTP请求/响应消息解析器。
  • 微格式
  • opengraph – 一个用来解析Open Graph协议标签的Python模块。
  • 可移植的执行体
  • pefile – 一个多平台的用于解析和处理可移植执行体(即PE)文件的模块。
  • PSD
  • psd-tools – 将Adobe Photoshop PSD(即PE)文件读取到Python数据结构。

自然语言处理

处理人类语言问题的库。

  • NLTK -编写Python程序来处理人类语言数据的最好平台。
  • Pattern – Python的网络挖掘模块。他有自然语言处理工具,机器学习以及其它。
  • TextBlob – 为深入自然语言处理任务提供了一致的API。是基于NLTK以及Pattern的巨人之肩上发展的。
  • jieba – 中文分词工具。
  • SnowNLP – 中文文本处理库。
  • loso – 另一个中文分词库。
  • genius – 基于条件随机域的中文分词。
  • langid.py – 独立的语言识别系统。
  • Korean – 一个韩文形态库。
  • pymorphy2 – 俄语形态分析器(词性标注+词形变化引擎)。
  • PyPLN  – 用Python编写的分布式自然语言处理通道。这个项目的目标是创建一种简单的方法使用NLTK通过网络接口处理大语言库。

浏览器自动化与仿真

  • selenium – 自动化真正的浏览器(Chrome浏览器,火狐浏览器,Opera浏览器,IE浏览器)。
  • Ghost.py – 对PyQt的webkit的封装(需要PyQT)。
  • Spynner – 对PyQt的webkit的封装(需要PyQT)。
  • Splinter – 通用API浏览器模拟器(selenium web驱动,Django客户端,Zope)。

多重处理

  • threading – Python标准库的线程运行。对于I/O密集型任务很有效。对于CPU绑定的任务没用,因为python GIL。
  • multiprocessing – 标准的Python库运行多进程。
  • celery – 基于分布式消息传递的异步任务队列/作业队列。
  • concurrent-futures – concurrent-futures 模块为调用异步执行提供了一个高层次的接口。

异步

异步网络编程库

  • asyncio – (在Python 3.4 +版本以上的 Python标准库)异步I/O,时间循环,协同程序和任务。
  • Twisted – 基于事件驱动的网络引擎框架。
  • Tornado – 一个网络框架和异步网络库。
  • pulsar – Python事件驱动的并发框架。
  • diesel – Python的基于绿色事件的I/O框架。
  • gevent – 一个使用greenlet 的基于协程的Python网络库。
  • eventlet – 有WSGI支持的异步框架。
  • Tomorrow – 异步代码的奇妙的修饰语法。

队列

  • celery – 基于分布式消息传递的异步任务队列/作业队列。
  • huey – 小型多线程任务队列。
  • mrq – Mr. Queue – 使用redis & Gevent 的Python分布式工作任务队列。
  • RQ – 基于Redis的轻量级任务队列管理器。
  • simpleq – 一个简单的,可无限扩展,基于Amazon SQS的队列。
  • python-gearman – Gearman的Python API。

云计算

  • picloud – 云端执行Python代码。
  • dominoup.com – 云端执行R,Python和matlab代码。

电子邮件

电子邮件解析库

  • flanker – 电子邮件地址和Mime解析库。
  • Talon – Mailgun库用于提取消息的报价和签名。

网址和网络地址操作

解析/修改网址和网络地址库。

  • URL
  • furl – 一个小的Python库,使得操纵URL简单化。
  • purl – 一个简单的不可改变的URL以及一个干净的用于调试和操作的API。
  • urllib.parse – 用于打破统一资源定位器(URL)的字符串在组件(寻址方案,网络位置,路径等)之间的隔断,为了结合组件到一个URL字符串,并将“相对URL”转化为一个绝对URL,称之为“基本URL”。
  • tldextract – 从URL的注册域和子域中准确分离TLD,使用公共后缀列表。
  • 网络地址
  • netaddr – 用于显示和操纵网络地址的Python库。

网页内容提取

提取网页内容的库。

  • HTML页面的文本和元数据
  • newspaper – 用Python进行新闻提取、文章提取和内容策展。
  • html2text – 将HTML转为Markdown格式文本。
  • python-goose – HTML内容/文章提取器。
  • lassie – 人性化的网页内容检索工具
  • micawber – 一个从网址中提取丰富内容的小库。
  • sumy -一个自动汇总文本文件和HTML网页的模块
  • Haul – 一个可扩展的图像爬虫。
  • python-readability – arc90 readability工具的快速Python接口。
  • scrapely – 从HTML网页中提取结构化数据的库。给出了一些Web页面和数据提取的示例,scrapely为所有类似的网页构建一个分析器。
  • 视频
  • youtube-dl – 一个从YouTube下载视频的小命令行程序。
  • you-get – Python3的YouTube、优酷/ Niconico视频下载器。
  • 维基
  • WikiTeam – 下载和保存wikis的工具。

WebSocket

用于WebSocket的库。

  • Crossbar – 开源的应用消息传递路由器(Python实现的用于Autobahn的WebSocket和WAMP)。
  • AutobahnPython – 提供了WebSocket协议和WAMP协议的Python实现并且开源。
  • WebSocket-for-Python – Python 2和3以及PyPy的WebSocket客户端和服务器库。

DNS解析

  • dnsyo – 在全球超过1500个的DNS服务器上检查你的DNS。
  • pycares – c-ares的接口。c-ares是进行DNS请求和异步名称决议的C语言库。

计算机视觉

  • OpenCV – 开源计算机视觉库。
  • SimpleCV – 用于照相机、图像处理、特征提取、格式转换的简介,可读性强的接口(基于OpenCV)。
  • mahotas – 快速计算机图像处理算法(完全使用 C++ 实现),完全基于 numpy 的数组作为它的数据类型。

代理服务器

  • shadowsocks – 一个快速隧道代理,可帮你穿透防火墙(支持TCP和UDP,TFO,多用户和平滑重启,目的IP黑名单)。
  • tproxy – tproxy是一个简单的TCP路由代理(第7层),基于Gevent,用Python进行配置。

其他Python工具列表

  • awesome-python
  • pycrumbs
  • python-github-projects
  • python_reference
  • pythonidae

]]>
Linux学习----文本三剑客——sed(马哥教育原创) http://blog.okbase.net/Python_lover/archive/56710.html Python_lover 2018/8/2 21:45:25 来源:马哥教育

我以前的文章介绍过grep了,今天我就来说一下第二个sed,它是stream editor的缩写。在Linux的文本文件中文本存储都是一行,显示时表现的多行其实都是因为有换行符的存在,例如:文本是:abc$def$ghi 显示出来就是三行了。Sed就是一个行编辑器,它一次读一行文本进行操作,然后根据我们的选择看是否同步到文本之中。还有一个叫awk的,在Linux上叫做gawk(gnu awk),它是一个文本格式化工具,我们下一篇文章再说。

         工作机制:每次读取一行文本至“模式空间(pattern space)”中,在模式空间中完成处理;将处理结果输出至标准输出设备;

         语法:sed [OPTION]... {script} [input-file]...

                  -r: 支持扩展正则表达式;

                  -n: 静默模式;

                  -e script1 -e script2 -e script3:指定多脚本运行;

                  -f /path/to/script_file:从指定的文件中读取脚本并运行;

                  -i: 直接修改源文件;

      地址定界:

                  #: 指定行;

                  $: 最后一行;

                  /regexp/:任何能够被regexp所匹配到的行;sed ‘/^#/d’ /etc/fstab #删除以井号开头的行

                  \%regexp%:同上,只不过换作%为regexp边界符;

                  /regexp/| :匹配时忽略字符大小写;

                  \%regexp%| :匹配时忽略字符大小写;

                  startline,endline:

                           #,/regexp/:从#行开始,到第一次被/regexp/所匹配到的行结束,中间的所有行;

                          #,#

                           /regexp1/,/regexp2/:从第一次被/regexp1/匹配到的行开始,到第一次被/regexp2/匹配到的行结束,中间的所有行;

                          #,+|-n:从#行开始,一直到向下的n行;

                           first~step:指定起始行,以及步长;

      sed的编辑命令

                          d: 删除模式空间中的行;sed ‘1,2d’ /etc/fstab

                          =:显示行号;sed ‘/^#/=’ /etc/fstab #显示以#号开头的行的行号

                          a \text:附加text;sed ‘/^#/a \new line’ /etc/fstab        #在以井号开头行的后面添加new line字样

                                   sed ‘1a \new line\nsecond line\ntherid line’     #\n表示换行符

                          i \text:插入text,支持\n实现多行插入;

                          c \text:用text替换匹配到的行;sed ‘/5,7/c \new txt’                 #五到七行都替换成一个new txt

                                   sed ‘/^#/c \new txt’ /etc/fstab     #只有井号开头的行都替换成new txt,不只一个

                          p: 打印模式空间中的行;sed ‘5,7p’ /etc/fstab       #5-7行的内容显示两遍,使用-n才符合我们的期望

                          s/regexp/replacement/:替换由regexp所匹配到的内容为replacement;

                                   g: 全局替换;

                                   i: 不区分大小写    #sed ‘s/^#//g’ /etc/fstab

                          w /path/to/somefile:把指定的内容另存至/path/to/somefile路径所指定的文件中;

                                   # sed ‘5,9w /tmp/test1.txt’ /etc/fstab #将fstab中的5-9行写到test1.txt中

                          r /path/from/somefile:在文件的指定位置插入另一个文件的所有内容,完成文件合并;

                                   #sed ‘8r /etc/issue’ /etc/fstab      #将issue的第8行之后的内容读进来放到fstab之前

            练习:

                                   (1) 删除/boot/grub/grub.conf文件中所有行的行首的空白字符;

                                            sed 's/^[[:space:]]\+//' /boot/grub/grub.conf

                                   (2) 删除/etc/fstab文件中所有以#开头,后跟至少一个空白字符的行的行首的#和空白字符;

                                            sed 's/^#[[:space:]]\+//' /etc/fstab

                                   (3) 把/etc/fstab文件的奇数行另存为/tmp/fstab.3;

                                            sed '1~2w /tmp/fstab.3' /etc/fstab

                                   (4) echo一个文件路径给sed命令,取出其基名;进一步地,取出其路径名;

                                            取基名:echo "/etc/sysconfig/network-scripts/" | sed 's@^.*/\([^/]\+\)/\?$@\1@'

                                            取路径名:echo "/etc/sysconfig/network-scripts/" | sed 's@[^/]\+/\?$@@'

Sed不仅有一个模式空间,还有一个保持空间,它可以帮助sed暂时存储一些东西以便后续的使用。

            高级命令:

                                   h:用模式空间中的内容覆盖保持空间的内容;

                                   H:把模式空间中的内容追加至保持空间中内容的后面;

                                   g:从保持空间中取到其内容,并将其覆盖模式空间中的内容;

                                   G:从保持空间中取到其内容,并将其追加在模式空间中的内容的后面;

                                   x:把保持空间和模式空间中的进行交换;

                                   n:读取匹配到的行的下一行至模式空间;(会覆盖模式空间中的原有内容);

                                   N:读取匹配到的行的下一行至模式空间,追加在模式空间中原有内容的后面;

                                   d:删除模式空间中的内容;

                                   D:删除多行模式空间中的首行;

                                   注意:命令功能可使用!取反;分号可用于分隔脚本;

                  示例:

                                   sed 'G' /etc/issue: 在文件中的每行后方添加空白行;

                                   sed '$!d' /etc/fstab:保留最后一行;

                                   sed '/^$/d;G' /etc/issue: 保证指定的文件每一行后方有且只有一个空白行;

                                   sed 'n;d' /etc/issue:保留奇数行;

                                   sed -n '1!G;h;$p' /etc/issue :全文倒叙显示

                                   sed '$!N;$!D' /etc/issue:显示最后两行

                  sed命令:

                          -e 'script' -e 'script'

                          'script;script;script' 与上一行模式相同

                          script

                          script

                          script

                          -f /path/from/script 都是第一行的作用

 

]]>