python shell脚本本做文本解析同php和python比哪个效率更高

Service Unavailable
Service Unavailable
HTTP Error 503. The service is unavailable.问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
RT.比如说定时任务,用 脚本语言 和 shell 都可以完成,请问区别在哪里?
这个问题已被关闭,原因:问题已解决 - 问题已解决,且对他人无借鉴意义
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
唯一的区别就是解释器不一样,shell 一般用的解释器是 /bin/bashphp 用的是 php 解释python 用的 python 解释器解释的
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
最终的执行结果是一样,可能过程不一样吧。。Shell Script感觉就是一些命令的集合有点类似Windows批处理吧。可能更快呢,坐看大佬讲解。学习学习
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
php 和 python 如果想实现「程序」 跑通,就必须要有相应的解释器,否则就很咸鱼一样,没用。。而shell则类似window下的 .bat 文件,是属于系统自带的一种东西。
做事情不在与一种语言,语言只是工具
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
比如饭,你也可以吃,*也可以吃,请问区别在哪里?
该答案已被忽略,原因:不符合答题规范,内容不是答案,可用评论、投票替代
这个问题已经被关闭无法回答
分享到微博?
Hi,欢迎来到 SegmentFault 技术社区!⊙▽⊙ 在这里,你可以提出编程相关的疑惑,关注感兴趣的问题,对认可的回答投赞同票;大家会帮你解决编程的问题,和你探讨技术更新,为你的回答投上赞同票。
明天提醒我
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:
扫扫下载 App
SegmentFault
一起探索更多未知用shell而不用perl/python的理由
先不用说&无论什么语言都是一种工具&。工具是我们身体的一部分,解放军解放台湾靠&小米加步枪&? &工具无所谓&论可以休矣。对于实际的软件工程工具和平台的选择是很重要的,有时候是致命的 1. perl是强大的, perl=shell+awk+sed+一堆命令行工具。 & &但是反过来也一样shell+awk+sed+一堆命令行工具可以替代perl.& 2. shell的简约,可读性比perl好,工具之间通过命令行stdio管道通信,任何一个小部分都可以拿出来测试和试验,程序维护/修改很容易。学习曲线和积累方式比perl更优。 3. perl是跨平台的呀!java,sysv标准, posix是跨平台工具和标准。oracle还跨平台呢! 但是实际软件部署是需要选择平台的,一旦选择好了就希望这个平台稳定。虽然unix/linux的命令行工具在不同的平台特性稍有不同,但是你一旦选定了平台,那么这个平台上的shell/命令行工具就是非常稳定的可依赖集合,不但可靠而且基本不会有变化。软件开发商的投资也因此受到了保护。perl和python则处于不断的变化当中,新的数据库DBI模块/某种功能的版本来临,需要perl/python升级到新的版本。那么新的版本是否可靠,是否影响原有系统的运行参数? 那么需要很多的回滚测试。perl可以写文件到某个路径,win下面用盘符开头,*nix下面用/路经开头---软件开发和部署的成本并没有因为perl跨平台而减少。 & & 如果perl只是用来作为&胶水&粘合其他的程序,那么跨平台也就无从谈起了。效率也比不上shell 4. python是面向对象的呀!不错,只是没有了shell使用管道拼接程序,难以单独拿出某一块来跑跑看看有什么效果。你必须读完整个程序才能发现出了什么问题。开发成本不比shell低。 5. Unix的Kiss原则,perl和python都违反了。我刚学习shell,用的很爽。脚本里面有一部分是sed和awk,我不懂不要紧,我留给以后学习&sed和awk&。尽管如此我可以看到sed和awk的输入输出是什么,不影响我理解程序。我有用了,可以学学awk,学学find的高级用法。这些都不会使得原先的shell程序过时。perl呢? 就像java, swing出来了awt就过时了,一个新框架出来了老框架就得推导。作为一个语言,问题域太大。而shell恰恰做到了kiss,它只做好自己的事情。 6. 作为弱类型语言的perl,虽然避免了类型的繁琐开销,同时也使得程序的调试更加困难,反而不如shell的文本IO来的直观。 7. DBI很强大吗? 我们的系统如果选定了oracle那我就在shell脚本里面sqlplus然后直接sql语句,用dbi岂不累死(5倍以上的代码),难里理解,难以调试,可读性也级差!为了dbi屏蔽了db的不同,提供统一的接口? 如果db要改变,那么定义文件,存储过程,函数什么的全都要重写!脚本调用只是一小部分。python也存在同样的问题。如果完全不用存储过程呢? 那么j2se+hibernate+spring好了,真正的跨平台。perl/python的思想是大而全,和win+vs如出一辙。 8. python的很多用户来自win,因为上面默认没有shell,哈哈 :D 9. python的运行取决于变量,像perl一样,无法如同shell一样提取IO的结果来直观的调试和修改。 10.是的, linux的anaconda安装界面,yum都是基于python的,gnome/kde也大量依赖perl。那是为了有一个&像脚本一样运行的c/c++&。 & &但是问题是操作系统,虚拟机,桌面管理器都是严肃的东西,那些系统级别的perl/python的代码有牛人和牛组织来保证。如果是普通的应用软件开发呢(卖钱的那种),用perl/python的人会因为各种目的,有的是为了程序今后的扩展性(其实他离开以后这个版本就完结了),有的是为了移植性(其实大部分的系统都被绑定在一个特定的平台),有的是为了赶时髦(很多python用户都是这么来的),还有的是为了显示自己的编程多么厉害使用一堆perl/python的高级特性:总之,这个豪华的工具就是双刃剑,对于普通的项目普通的软件开发者来说,会给我们展示一个虚拟的天国(其实团队达不到那样的把握水准),然后会把事情弄得一团糟。& & 所以我选择古老的shell,古老而且稳定,保守而久经考验,足够而且简洁。M16会被更好的M4取代,但是AK47却是永恒的。
以下是话题补充:
:这篇文章是反面例子,别踩我,谢谢,哈哈
这类文章,真蛋疼,没什么参考价值又会挑起语言战争。本身作者就很弱“&
我刚学习shell,用的很爽。脚本里面有一部分是sed和awk,我不懂不要紧,我留给以后学习&sed和awk&”。写的文章真心没什么参考价值还漏洞百出。不要被误导。
结论都很武断
楼上二位,转这篇文章就是给大家喷的,但是别扣我分啊
--- 共有 3 条评论 ---
: 在我的回复上加个分就是了哈哈
好吧我错了,我以为被踩只是我扣分。亲,要不我提个问题,然后你回答。我采纳^_^
虽然我没踩...
这篇文章很搞笑,稍微复杂一点的功能需求shell完成起来就非常费劲了...基本上不具备可比性
管理开始干活可以学shell
程序员可以学另外两种
shell 感觉比python 难懂, perl比 shell 难懂
就这个区别
其实很多时候用php或python代替shell,非常方便,俺平时就用php和python写过很多管理脚本,只要能简单快速的完成事情就行,
不同场景不同时限不同数据规模选用不同的工具仅此而已
有意思吗 就是个工具而已,那个快用那个。
这文章写的跟SB一样…… 我恶意地揣测下这家伙实际上shell, perl,python三个都不怎么会。分享到: ()展开微博窗口
微信:10086
展开分类目录
今天和DIYGod聊天,他的网站有时候会宕机,重启下就行了,正好之前看到 Find 的文章有些感想
想到一个思路,用python判断场景后执行对应的shell脚本文件,来实现自动化地宕机重启
虽然现在没有在VPS上搭建博客,以后要用可能也不是这个场景,但是还是觉得去研究下非常有意义,做如下记录
主要有两种方法: os.system(cmd)或os.popen(cmd)
首先你需要导入os模块
然后可以在括号中直接敲 Linux(OS X应该也可以)指令
两者有一定区别,看的文章中说“前者返回值是脚本的退出状态码,后者的返回值是脚本执行过程中的输出内容”
然而我在 Python3下测试直观前者更方便(写到后面我发现后面的意义也很大),后者返回的是一个 file-like 的对象,你可以利用相对于的文件方法进行优化处理
chrom下右键新标签页打开查看大图
宕机监测和对应的判断分支语句我给省略了,主要看下这个场景(其实是我懒+没写过233)
首页shell脚本写好后,别忘了chmod,加上执行权限
&&& import os
&&& os.system('ls')
&&& os.system('ls -l')
-rwxrw-r-- 1 jimmy66 users 42 3月
17 02:14 1.sh
&&& os.system('./1.sh')
already restart
1234567891011
&&& import os&&& os.system('ls')1.sh0&&& os.system('ls -l')总用量 4-rwxrw-r-- 1 jimmy66 users 42 3月&&17 02:14 1.sh0&&& os.system('./1.sh')already restart1536
第一个是相对于指令执行后,我们人看到的内容,第二个是返回值
该方法在调用完shell脚本后,返回一个16位的二进制数,低位为杀死所调用脚本的信号号码,高位为脚本的退出状态码,即脚本中“exit 1”的代码执行后,os.system函数返回值的高位数则是1,如果低位数是0的情况下,则函数的返回值是0×100,换算为10进制得到256。
这个学过单片机和汇编的同学应该很好理解,其实学过数电也行(上学期这三门我同时学的)
&&& b=os.system('./1.sh')
already restart
&&& b=os.system('./1.sh')already restart&&& b1536&&& b&&86
需要注意的是b作为变量只能接受第二个值,第一个值直接打印到了终端上,这个对程序处理来说显然是无法进行储存和二次使用的
所以如果比较在shell脚本中输出的内容,并且要进行二次处理的话,使用方法二
&&& os.popen('./1.sh')
&os._wrap_close object at 0x7fe771f9da58&
&&& a=os.popen('./1.sh')
&&& a.read()
'already restart\n'
&&& os.popen('./1.sh')&os._wrap_close object at 0x7fe771f9da58&&&& a=os.popen('./1.sh')&&& a.read()'already restart\n'
而方法一的返回值也意义很大,我之前考虑过一个场景,如果在自动调用后,判断是否调用成功,不成功再次反复调用shell脚本,或者执行对应的修复分支
这个时候 我储存b变量的作用就体现了,我们设置可以设置多个脚本文件及其对应的返回值来进行对应的分支场景判断,增强程序的健壮性和功能性
主要注意的是cmd需要以字符串形式放在括号中,如果短的可以自己直接在python语句中写,但是我个人还是更倾向写成shell脚本形式
然后用形如
“./1.sh”
或者”绝对路径/1.sh”的方式运行,注意一定要指明路径,不然是无法运行的
python 1.py
python 1.py
这不像cd到对应的路径下,可以用python+文件名直接执行python脚本一样
写成脚本形式的好处:
1、便于分开编辑
2、python我个人很多时候是在命令行直接敲的,这个时候用文件编辑器改shell文件明显比在命令行里面一行行敲代码来得方便
以上,希望这篇文章也能给你提供一种Linux下的自动化思路,还有些其他技能参考后面的链接,这里就不一一赘述了
参考资料:}

我要回帖

更多关于 python编写shell脚本 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信