Pythonshell的一些思考

如果使用python去写脚本来处理日常事务的话,相对于shell是一件比较麻烦的事情,因为我可以使用shell在花费更少的时间内,比较熟练地使用awk、sed和grep这些常用的命令在非常简短的脚本语句内,完成python一大段代码所能够完成的功能。

前两天,读到了一篇文章“又拍网架构-又一个用到Python的网站”,网址:http://www.fovweb.com/web/youpai-python.html。上面写到:又拍网的服务器端开发语言主要是PHP和Python,其中php用于编写Web逻辑,而Python则主要用于开发内部服务和后台任务。一般情况下,网站架构的开发语言可以用下图所描述:

百度百科上对于Python的介绍是:一种面向对象、直译式程序设计语言,也是一种功能强大而且完善的通用型语言,已经具有十多年的发展历史,成熟且稳定。这种语言具有非常清晰的语法特点,适合完成各种高层任务,几乎可以在所有的操作系统中运行。目前,基于这种语言的相关技术正在飞速发展,用户数量急剧扩大,相关的资源非常多。

综合网络及书籍对于Python的各种评价来看,Python应用是非常的广泛,而且在未来也是非常被看好的语言。但这并不代表Python是适用于任何场合的,如对于一个SA(系统分析员)而言,平时管理系统用shell脚本肯定是最简单的,如果纯粹的系统管理,应该很少有问题是shell解决不了的,使用shell来处理也会显得更加地方便和快捷,举个例子:把所有开头是#的行都找出来,用shell只需要一个grep命令,而对于Python则需要open(文件).readlines(),然后还需要读入正则表达式模块,一行一行地读入文本,再分析该行是否满足条件,需要一大堆的逻辑代码才能完成shell一个命令的功能。

当然,任何一种语言必定有它的适用范围,虽然在开发效率方面Python要低于shell要高于shell,但Python相对于shell的优点,依照我最近的学习,感觉可以概括为如下方面:

(1)Python不需要记忆太多的命令,语法简单,有C基础的人学起来非常容易上手,易于使用。而shell要学的命令太多了,但常用的命令不是太多。

(2)Python可移植性好,它的标准是统一的,不会出现因为平台的不同运行结果不同,但shell的命令在各个平台上还有些不一样。

(3)Python要更加强大,shell是一种命令语言,同时也可以看成是一个命令解释器,用于接收诸如awk、sed的命令调用等完成相关的功能。而Python则是一种编程语言,Python提供给程序员更大的自由度和灵活性,以完成shell所不能完成或者难于完成的编码任务,如实现面向对象的模块化设计、操作服务器数据库等等。

(4)Python支持面向对象、支持可扩展性和可嵌入性,同时提供了功能丰富的库

(5)性能方面:很明显地,Python的执行效率要高于shell,有一个很充分的理由就是shell本身的各种进程间IPC通信要造成相当大的开销。而Python底层是用C实现的,其性能可以接近于C,但具体相同功能的Python代码量却要比C短上很多倍!因此,按照性能排序:C > Python > shell,按照开发效率排序:shell > Python > C。

其实对于各种编程语言的发展,如果纯以语言的执行效率而言,最快的肯定是汇编了,为什么有了汇编之后还会有C?而有了C之后还会有Perl、Python呢?这应该是许许多多天才般的程序语言设计者们,从开始都现在一直在不断地追求的,试图在语言的执行性能与易用性上寻找一个平衡点。而语言本身只是工具而已,而这项工具好不好用,除了很大程度上取决于语言本身的设计之外,另一方面则是与语言使用者本身的熟练度、能力和水平密切相关。

程序设计语言其诞生的意义在于解决问题,验证想法,属于对问题求解的实践过程,如研究数据挖掘的,主要关注的是数据的分布、概率模型等数学算法问题,用哪种语言来验证方案的可行性并不非常重要,对于语言本身的唯一的要求可能就是要好用,最好不需要有太多复杂的语法,通过简单地学习就可以上手并能轻松地写出程序,二是要执行效率可以接受,不需要最快,但也不能太慢。

而在执行效率与易用性上,脚本语言给了用户一个很好的平衡点,而这一点,恰恰是脚本语言的最重要的意义。我们可以通过脚本方便快捷地编写代码,甚至在某些情况下,这此脚本代码执行的效率跟C是相差无几的。

春节过年,走亲访友是常事,就没有用实验去验证比较一下shell、Python和C性能的差异。不过我找到一个非常有意思的网站:http://shootout.alioth.debian.org/

这个站点对比了所有主流语言的执行的性能包括[时间、内存、代码量],如下图所示的是:在运行多个有代表性的测试用例情况下,Python的性能除以C语言的性能得到的数据图,可以看出C在[时间、内存]上的开销要低于Python,但在[代码量]上Python要少于C。

哇~语言组织的好好,后面学python 跨平台可用嘛~
4楼 luoyanghero 2014-03-24 22:16发表 [回复]
之前还在徘徊学shell还是python,现在决定学python了,thanks
3楼 nerissa 2014-02-08 23:24发表 [回复]
看你干嘛吧。若是纯粹写个什么服务器脚本的,300行以内的。个人觉得SHELL就够了。但若要写一个大逻辑什么的1000行,看情况。
2楼 liuchunyan007 2013-10-10 13:50发表 [回复]
shell太多的指令,常用的没有几个,
1楼 地球类人猿党主席 2011-12-20 22:22发表 [回复] [引用] [举报]
仅会使用C,正考虑是学习下shell还是python呢,

Python shell对比的更多相关文章

  1. python编辑器对比和推荐

    python编辑器对比和推荐   我先给一个初步的表格吧,大家如果有什么意见,或有补充,欢迎提出.有些我没有用过,先不写了.以下是我使用过的python IDE: 除了PythonWin, Visua ...

  2. 如何在Windows下开发Python:在cmd下运行Python脚本+如何使用Python Shell(command line模式和GUI模式)+如何使用Python IDE

    http://www.crifan.com/how_to_do_python_development_under_windows_environment/ 本文目的 希望对于,如何在Windows下, ...

  3. ipython, 一个 python 的交互式 shell,比默认的python shell 好用得多,支持变量自动补全,自动缩进,支持 bash shell 命令,内置了许多很有用的功能和函数

    一个 python 的交互式 shell,比默认的python shell 好用得多,支持变量自动补全,自动缩进,支持 bash shell 命令,内置了许多很有用的功能和函数. 若用的是fish s ...

  4. PowerShell与Unix Shell对比:八大实例

    PowerShell与Unix Shell对比:八大实例 本文将从八个实例对比PowerShell和Unix Shell,通常是Linux Bourne Shell(包括sh.ksh和bash等).二 ...

  5. 【转载】路径双反斜杠!!!Python IDLE或Python shell中切换路径 切换目录os.chdir("C:\\python37\\2019pythonshel37\\diedai")

    Python IDLE或shell中切换路径在Python自带的编辑器IDLE中或者python shell中不能使用cd命令,那么跳到目标路径呢.方法是使用os包下的相关函数实现路径切换功能. im ...

  6. python shell与反弹shell

    python shell与反弹shell 正常shell需要先在攻击端开机情况下开启程序,然后攻击端运行程序,才能连接 反弹shell,攻击端是服务端,被攻击端是客户端正常shell,攻击端是客户端, ...

  7. 解决 Python shell 中 Delete/Backspace 键乱码问题

    简述 进入 Python shell,按下 Delete/Backspace 键,会出现 ^H 字符.命令输入错误后只能从头开始,无法删除,让人很头疼.为了便于后期使用,分享一个一劳永逸的方式. 基本 ...

  8. 基于Python Shell获取hostname和fqdn释疑

    一直以来被Linux的hostname和fqdn(Fully Qualified Domain Name)困惑了好久,今天专门抽时间把它们的使用细节弄清了. 一.设置hostname/fqdn 在Li ...

  9. python性能对比

    python性能对比之items #1 #-*- coding:utf8-*- import datetime road_nodes = {} for i in range(5000000): roa ...

随机推荐

  1. B. Ohana Cleans Up(Codeforces Round #309 (Div. 2))

    B. Ohana Cleans Up   Ohana Matsumae is trying to clean a room, which is divided up into an n by n gr ...

  2. ZH奶酪:通过CSS自定义HTML中hr样式-颜色-形状

    修改颜色,线条形状,粗细等... CSS代码: .zh_hr{ border:3px solid rgba(255, 255, 255, 0.50); margin-bottom: 2px; marg ...

  3. strcpy sprintf memcpy 它们之间的区别

    strcpy,sprintf,memcpy的区别 strcpy 函数操作的对象是 字符串,完成 从 源字符串 到 目的字符串 的 拷贝 功能.  snprintf 函数操作的对象 不限于字符串:虽然目 ...

  4. Hibernate(四)结构-基础语义和事务

    一.基础语义 核心: Configuration SessionFactory Session 二.Configuration Configuration类负责管理Hibernate的配置信息,Hib ...

  5. Junit和Spring

    @ContextConfiguration 用来指定加载的Spring配置文件的位置,会加载默认配置文件 例如下例会加载:classpath:/com/example/MyTest-context.x ...

  6. Flash:DisplayObject的transform/matrix的潜规则、小bug

    AS3中,使用DisplayObject的transform/matrix,需要先clone出来,再变换,再赋值回去,这样才会对DisplayObject产生影响,不能直接对原Matrix操作.   ...

  7. 虚拟机安装的Winserver 2008 R2系统,宿主机无法ping通主机

    新安装的虚拟机,在虚拟机中安装了Winserver2008 R2系统,网络适配器已经设置为桥接模式(自动) 刚开始的几天很正常,但是过了几天后,发现连接不了了,后来才发现是因为网络问题. 解决方案:修 ...

  8. JUC-闭锁:CountDownLatch

    CountDownLatch::闭锁,在完成某些运算是,只有其他所有线程的运算全部完成,当前运算才继续执行. 实例化:参数:设置一个计数器的值. final CountDownLatch latch ...

  9. servlet ServletConfig ServletContext

    ServletConfig对象 在Servlet的配置文件中,可以使用一个或者多个<init-param>标签为servlet配置一些初始化参数. 当servlet配置了初始化参数后,we ...

  10. linux 使用wc命令统计文件行数、字数及大小

    语法:wc [选项] 文件… 说明:该命令统计给定文件中的字节数.字数.行数.如果没有给出文件名,则从标准输入读取.wc同时也给出所有指定文件的总统计数.字是由空格字符区分开的最大字符串. 该命令各选 ...