700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > python 执行shell命令行效率提升_在python脚本中执行shell命令的方法

python 执行shell命令行效率提升_在python脚本中执行shell命令的方法

时间:2022-07-11 19:27:24

相关推荐

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 , 13:37:34)3[GCC 4.4.7 0313 (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 , 13:37:34)3[GCC 4.4.7 0313 (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 , 13:37:34)3[GCC 4.4.7 0313 (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 , 13:37:34)3[GCC 4.4.7 0313 (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

免责声明:内容和图片源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。