引言Python在近年来的受欢迎程度剧增,部分原因在于该语言非常灵活,同时功能非常强大。Python可用于系统管理、Wb开发、GUI编程、科学计算等等。本文的主要目标是向习惯于使用Bash、PHP或其它某种语言编写脚本过程代码的人介绍面向对象的Python开发,并帮助他们转换到面向对象的Python开发。Python的这种日益流行性意味着,对于目前使用其他编程语言的开发人员,除了使用他们最喜欢的语言之外,他们还可以采用Python来完成某些项目。过程式编程当然有其用武之地,并且可能是解决某个问题的高度有效的方法。在非常基本的层次上,过程式编程可定义为指令的列表,Bash和PHP通常就是以这样的方式编写的。然而由于Python的流行,对于作为Wb开发人员或系统管理员的PHP和Bash脚本编写人员,他们正陷入必须同时学习面向对象的编程和Python的境地。面向对象这个概念很难一次性地掌握,因此本文采用过程式Bash和PHP脚本,并首先将它们转换为过程式Python。作为最后一步,它们将转换为面向对象的Python这个终结目标。本文在结束时将简略讨论一下面向对象的Python的一些优点,然后在最后讨论一些可能更适合采用过程或函数式编程的一些不利场景。到本文结束时,Bash或PHP程序员应该能够毫无畏惧地一头扎进面向对象的Python项目。采用PHP和Bash编写磁盘监视函数虽然PHP主要是为了在浏览器中运行,但是也可以通过xc函数执行系统调用。采用PHP编写的第一个示例将捕获Shll命令“df–h”的输出,将输出放在一个数组中,然后根据一个正则表达式检查输出的每一行。如果该行与正则表达式匹配,则打印该行。如果您希望从主目录运行此示例,只需将此脚本命名为indx.php,并将其放在Apach/mod_php服务器的对外服务目录中。PHP磁盘监视示例 html body ?php //Analyzsdiskusag //Taksrgxpattrnandmssag functiondisk_spac($pattrn="/2[0-9]%/",$mssag="CAPACITYWARNING:") { xc(scapshllcmd("df-h"),$output_lins,$rturn_valu); forach($output_linsas$output){ if(prg_match($pattrn,$output)) cho"b$mssag/b$output "; } } disk_spac() ? /body /html 复制代码 如果您在浏览器中运行此网页,将会获得以下结果: CAPACITYWARNING:/dv/sda13.8GM2.9G20%/查看该代码,可以看到正则表达式模式被设置为匹配某个包含20-29%的行。可以容易地修改此模式以适应其他标志,例如90-99%,因为20%是非常低的磁盘容量。下面让我们看一下如何在Bash函数中完成同样的事情。在Bash中,该问题要容易解决得多,因为您实际上是在处理系统调用。在此示例中,您甚至不需要使用数组或正则表达式库,因为使用到grp的管道容易多了。不过,在Bash中设置函数的缺省参数始终有点麻烦。Bash磁盘监视示例 #!/usr/bin/nvbash #functionflagsdiskusagtakspattrnandmssagoptionally functiondisk_spac() { #chcksforpattrnparamtr if["$1"!=""];thn pattrn=$1 ls pattrn="2[0-9]%" fi #chcksformssagparamtr if["$2"!=""];thn mssag=$2 ls mssag="CAPACITYWARNING:" fi #looksatoutputforpattrntoflag output_lins=`df-h grp$pattrn` if["$output_lins"!=""];thn cho$mssag$output_lins fi } #xamplofoptionalparamtrsusag #disk_spac9[0-9]%ALERT: disk_spac 复制代码 当您运行此脚本时,将会获得同样的输出,因此可以跳过输出的显示。您能够从该脚本的PHP版本和Bash版本中找到的相关性在于,此过程式代码事实上像一组指令一样运行。似乎计算机就像是一个小孩,而您告诉该小孩如何做某件事情,例如第一次系鞋带。在您开始在Python中考虑“面向对象范式”之前,让我们首先看一下如何采用Python来创建这同一个脚本的过程式版本。Python磁盘监视示例 fromsubprocssimportPopn,PIPE importr dfdisk_spac(pattrn="2[0-9]%",mssag="CAPACITYWARNING:"): #taksshll最好白癜风医院电话北京去哪里医院治疗白癜风好
|