使用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命令的方法相关推荐

  1. 将blast等工具的命令行写入到biopython的代码脚本中

    biopython: Bio.Application package全面解析 将生物信息学工具(blast,muscle,bwa,samtool等)的命令行写入到biopython的代码脚本中 大家好 ...

  2. python 命令行解析模块_【Python模块】命令行解析--argparse

    python命令行解析 前言 当你还在使用 if len(sys.argv) > 1: 这样的方式判断选项和参数的时候,是否已意识到已经落伍了. 我在bash中用过getopt getopts, ...

  3. python命令行窗口最大化_基于python的豆瓣FM(终端命令行界面)

    douban.fm 这个版本的命令行界面是参考了 Node.js版本的douban.fm制作的,向原作者致敬.终端界面设计的非常好看. 感谢Cloverstd的修改,已经支持Mac OS X(> ...

  4. mysql执行效率低_如何查询mysql中执行效率低的sql语句

    展开全部 一.MySQL数据库有几个配置选项可以32313133353236313431303231363533e59b9ee7ad9431333337373563帮助我们及时捕获低效SQL语句 1, ...

  5. python提取英文单词 每行显示一个_使用python对文件中的单词进行提取

    由于需要使用一个纯单词组成的文件,在网上下载到了一个存放单词的文件,但是里面有中文的解释,那就需要做一下提取了. 文本的形式如下: 所见即所得,这个文本是有规律的,每个单词为一行,紧接着下一行便是单词 ...

  6. python如何输入多行数据合并_关于Python中的合并字典,这些问题必须搞清楚!

    全文共1474字,预计学习时长6分钟 图源:unsplash Python 3.9现在处于初始开发阶段,但其中让人惊喜的新功能可不少.其中一个是颠覆性的,它能使处理Python字典时编写的代码更具可读 ...

  7. [shell] 让你提升命令行效率的 Bash 快捷键 [完整版]

    让你提升命令行效率的 Bash 快捷键 [完整版] 大牛---zhangkaixuan整理 生活在 Bash shell 中,熟记以下快捷键,将极大的提高你的命令行操作效率. 编辑命令 •      ...

  8. shell脚本中执行命令_如何在Shell脚本中执行命令?

    shell脚本中执行命令 Shell is a command-line interpreter that allows the user to interact with the system. I ...

  9. python的执行过程_在交互式环境中执行Python程序过程详解

    前言 相信接触过Python的伙伴们都知道运行Python脚本程序的方式有多种,目前主要的方式有:交互式环境运行.命令行窗口运行.开发工具上运行等,其中在不同的操作平台上还互不相同.今天,小编讲些Py ...

最新文章

  1. 百度AI开放平台3.0:平等赋能成为百度AI关键词
  2. Cesium界面学习以及隐藏界面控件
  3. Linux dd命令制作U盘启动盘
  4. 鹏博士和阿里云数据库产品达成战略合作,共赢企业数智化创新市场
  5. ×××linux下vsftp服务器
  6. kafka跨集群同步方案
  7. 学习笔记之centos系统启动流程
  8. 利用python爬虫爬百度百聘招聘数据----利用Ajax的方式抓取
  9. HiJson(Json格式化工具)64位中文版下载 v2.1.2
  10. office插件开发_OneKeyTools:强大PPT插件
  11. c语言之判断if语句
  12. Alpha 冲刺(5/10)
  13. 10+ 小故事揭秘高频「操作系统面试题」
  14. border-radius 使用技巧
  15. 如何解决:无法删除文件夹,目录不是空的。
  16. My Idea About ID wly_sh (关于用户名 wly_sh 的猜想)
  17. 安徽工程大学计算机专业分数,2017安徽工程大学录取分数线
  18. 只有突破你的思维,你才能真正做大,只有少数人明白的顶尖思维!
  19. Android培训班(48)
  20. 钻石的基本知识(买钻戒的时候需要了解)

热门文章

  1. sql 中使用 where 1=1 和 where 1=0的作用
  2. 相似度--欧氏距离(归一化)
  3. 一个LINUX高手写给初学者的话
  4. 揭开ITIL 4的神秘面纱,引领企业数字化转型
  5. 阿里云VGN5i虚拟化GPU服务器价格更低的GPU计算服务
  6. Redis入门基础详解
  7. 注意稳住或慢抬离合,给车辆一些缓冲,才能平顺起步。抬得太快,
  8. SQL基础使用入门(二): DML语句和DCL语句
  9. svn文件同步到web服务器,即同步到网站根目录
  10. 软件材料填写中的行数统计和代码文本合并