python 执行shell命令行效率提升_在python脚本中执行shell命令的方法
使用Python处理一个shell命令或一个执行一个shell脚本,一般情况下,有以下三种方法,以下我们来看:
第一种方法是使用os.system的方法
os.system(“ cmd”)我们在当前目录下面创建一个aaa.sql的文件,文件中的内容是aaa,然后我们来看测试过程1[root@ /data ]$python2Python 2.7.15 (default, Nov 29 2018, 13:37:34)3[GCC 4.4.7 20120313 (Red Hat 4.4.7-18)] on linux24Type "help", "copyright", "credits" or "license" for more information.5 import os6 os.system('cat aaa.sql')7aaa809 os.system('cat bbb.sql')10cat: bbb.sql: No such file or directory11256
可以看到这个方法使用shell命令打印出来aaa.sql中的内容,然后下面出现的数字0代表上述命令执行成功;如果我们打印bbb.sql则返回值是256,表示执行中出现了问题。
第二种方法是使用commands.getstatusoutput()方法
commands.getstatusoutput(“ cmd”)
我们来看测试结果:
1[root@ /data]$python2Python 2.7.15 (default, Nov 29 2018, 13:37:34)3[GCC 4.4.7 20120313 (Red Hat 4.4.7-18)] on linux24Type "help", "copyright", "credits" or "license" for more information.5 import commands6 commands.getstatusoutput('pwd')7(0, '/data')8 commands.getstatusoutput('pwddddd')9(32512, 'sh: pwddddd: command not found')10 exit()
当我们执行shell命令pwd的时候,commands.getstatusputput返回值是0,也就是执行成功,返回结果是当前的目录;当执行pwddddd的时候,由于不是系统命令,所以返回结果是命令未找到,返回值是32512
看到这里,可能大家有一个疑问,就是这两种方法都可以返回执行结果,它们有什么不同?看下面的测试
1os的方法只能得到返回值,执行结果无法保存2 import os3 a=os.system('cat aaa.sql')4aaa5 print a607 a,b=os.system('cat aaa.sql')8aaa9Traceback (most recent call last):10 File "stdin", line 1, in module11TypeError: 'int' object is not iterable1213commands的方法可以直接得到返回值和执行结果14 import commands15 a=commands.getstatusoutput('cat aaa.sql')16 print a17(0, 'aaa')18 a,b=commands.getstatusoutput('cat aaa.sql')19 print a20021 print b22aaa
也就是说,commands.getstatusoutput的方法,可以得到一个脚本或一个命令的返回值和执行结果,当然,我们也可以使用下面的方法来分别校准aaa.sql文件是否存在,并查看aaa.sql的执行结果:
1[root@ /data]$python2Python 2.7.15 (default, Nov 29 2018, 13:37:34)3[GCC 4.4.7 20120313 (Red Hat 4.4.7-18)] on linux24Type "help", "copyright", "credits" or "license" for more information.5 commands.getoutput('cat aaa.sql')6'aaa'7 commands.getstatus('aaa.sql')8'-rw-r--r-- 1 root root 4 Dec 10 20:36 aaa.sql'
有了上面的基础,我们可以很方便的写出如下代码,把脚本的执行结果和返回值进行保存,根据脚本执行的结果来确定最终的返回值:
1cmd = "/bin/sh /data/scripts/test.sh %s" % para2status, res = commands.getstatusoutput(cmd)3MYLOGGER.logger.info(status,res)4MYLOGGER.logger.info("cmd do finished,result is [%s],[%s]" % (str(status),str(res)))5if status == 0:6 result["result"] = res.split('\n')[-1]7else:8 result["result"] = false9 result["message"] = res10return Response(result)
如果脚本中是对数据库的一系列操作,那么利用python和数据库进行交互也就水到渠成了。
第三种方法是使用popen函数
os.popen()返回的是file read的对象,进行进行读取read()的操作可以看到执行的输出
1[root@ /data]$python2Python 2.7.15 (default, Nov 29 2018, 13:37:34)3[GCC 4.4.7 20120313 (Red Hat 4.4.7-18)] on linux24Type "help", "copyright", "credits" or "license" for more information.5 import os6 output = os.popen('cat aaa.sql')7 print output.read()8aaa
免责声明:内容和图片源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。
python 执行shell命令行效率提升_在python脚本中执行shell命令的方法相关推荐
- 将blast等工具的命令行写入到biopython的代码脚本中
biopython: Bio.Application package全面解析 将生物信息学工具(blast,muscle,bwa,samtool等)的命令行写入到biopython的代码脚本中 大家好 ...
- python 命令行解析模块_【Python模块】命令行解析--argparse
python命令行解析 前言 当你还在使用 if len(sys.argv) > 1: 这样的方式判断选项和参数的时候,是否已意识到已经落伍了. 我在bash中用过getopt getopts, ...
- python命令行窗口最大化_基于python的豆瓣FM(终端命令行界面)
douban.fm 这个版本的命令行界面是参考了 Node.js版本的douban.fm制作的,向原作者致敬.终端界面设计的非常好看. 感谢Cloverstd的修改,已经支持Mac OS X(> ...
- mysql执行效率低_如何查询mysql中执行效率低的sql语句
展开全部 一.MySQL数据库有几个配置选项可以32313133353236313431303231363533e59b9ee7ad9431333337373563帮助我们及时捕获低效SQL语句 1, ...
- python提取英文单词 每行显示一个_使用python对文件中的单词进行提取
由于需要使用一个纯单词组成的文件,在网上下载到了一个存放单词的文件,但是里面有中文的解释,那就需要做一下提取了. 文本的形式如下: 所见即所得,这个文本是有规律的,每个单词为一行,紧接着下一行便是单词 ...
- python如何输入多行数据合并_关于Python中的合并字典,这些问题必须搞清楚!
全文共1474字,预计学习时长6分钟 图源:unsplash Python 3.9现在处于初始开发阶段,但其中让人惊喜的新功能可不少.其中一个是颠覆性的,它能使处理Python字典时编写的代码更具可读 ...
- [shell] 让你提升命令行效率的 Bash 快捷键 [完整版]
让你提升命令行效率的 Bash 快捷键 [完整版] 大牛---zhangkaixuan整理 生活在 Bash shell 中,熟记以下快捷键,将极大的提高你的命令行操作效率. 编辑命令 • ...
- shell脚本中执行命令_如何在Shell脚本中执行命令?
shell脚本中执行命令 Shell is a command-line interpreter that allows the user to interact with the system. I ...
- python的执行过程_在交互式环境中执行Python程序过程详解
前言 相信接触过Python的伙伴们都知道运行Python脚本程序的方式有多种,目前主要的方式有:交互式环境运行.命令行窗口运行.开发工具上运行等,其中在不同的操作平台上还互不相同.今天,小编讲些Py ...
最新文章
- 百度AI开放平台3.0:平等赋能成为百度AI关键词
- Cesium界面学习以及隐藏界面控件
- Linux dd命令制作U盘启动盘
- 鹏博士和阿里云数据库产品达成战略合作,共赢企业数智化创新市场
- ×××linux下vsftp服务器
- kafka跨集群同步方案
- 学习笔记之centos系统启动流程
- 利用python爬虫爬百度百聘招聘数据----利用Ajax的方式抓取
- HiJson(Json格式化工具)64位中文版下载 v2.1.2
- office插件开发_OneKeyTools:强大PPT插件
- c语言之判断if语句
- Alpha 冲刺(5/10)
- 10+ 小故事揭秘高频「操作系统面试题」
- border-radius 使用技巧
- 如何解决:无法删除文件夹,目录不是空的。
- My Idea About ID wly_sh (关于用户名 wly_sh 的猜想)
- 安徽工程大学计算机专业分数,2017安徽工程大学录取分数线
- 只有突破你的思维,你才能真正做大,只有少数人明白的顶尖思维!
- Android培训班(48)
- 钻石的基本知识(买钻戒的时候需要了解)