python 执行shell命令行效率提升_在python脚本中执行shell命令的方法
使用Python處理一個(gè)shell命令或一個(gè)執(zhí)行一個(gè)shell腳本,一般情況下,有以下三種方法,以下我們來(lái)看:
第一種方法是使用os.system的方法
os.system(“ cmd”)我們?cè)诋?dāng)前目錄下面創(chuàng)建一個(gè)aaa.sql的文件,文件中的內(nèi)容是aaa,然后我們來(lái)看測(cè)試過(guò)程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
可以看到這個(gè)方法使用shell命令打印出來(lái)aaa.sql中的內(nèi)容,然后下面出現(xiàn)的數(shù)字0代表上述命令執(zhí)行成功;如果我們打印bbb.sql則返回值是256,表示執(zhí)行中出現(xiàn)了問(wèn)題。
第二種方法是使用commands.getstatusoutput()方法
commands.getstatusoutput(“ cmd”)
我們來(lái)看測(cè)試結(jié)果:
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()
當(dāng)我們執(zhí)行shell命令pwd的時(shí)候,commands.getstatusputput返回值是0,也就是執(zhí)行成功,返回結(jié)果是當(dāng)前的目錄;當(dāng)執(zhí)行pwddddd的時(shí)候,由于不是系統(tǒng)命令,所以返回結(jié)果是命令未找到,返回值是32512
看到這里,可能大家有一個(gè)疑問(wèn),就是這兩種方法都可以返回執(zhí)行結(jié)果,它們有什么不同?看下面的測(cè)試
1os的方法只能得到返回值,執(zhí)行結(jié)果無(wú)法保存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的方法可以直接得到返回值和執(zhí)行結(jié)果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
也就是說(shuō),commands.getstatusoutput的方法,可以得到一個(gè)腳本或一個(gè)命令的返回值和執(zhí)行結(jié)果,當(dāng)然,我們也可以使用下面的方法來(lái)分別校準(zhǔn)aaa.sql文件是否存在,并查看aaa.sql的執(zhí)行結(jié)果:
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'
有了上面的基礎(chǔ),我們可以很方便的寫(xiě)出如下代碼,把腳本的執(zhí)行結(jié)果和返回值進(jìn)行保存,根據(jù)腳本執(zhí)行的結(jié)果來(lái)確定最終的返回值:
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)
如果腳本中是對(duì)數(shù)據(jù)庫(kù)的一系列操作,那么利用python和數(shù)據(jù)庫(kù)進(jìn)行交互也就水到渠成了。
第三種方法是使用popen函數(shù)
os.popen()返回的是file read的對(duì)象,進(jìn)行進(jìn)行讀取read()的操作可以看到執(zhí)行的輸出
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
免責(zé)聲明:內(nèi)容和圖片源自網(wǎng)絡(luò),版權(quán)歸原作者所有,如有侵犯您的原創(chuàng)版權(quán)請(qǐng)告知,我們將盡快刪除相關(guān)內(nèi)容。
總結(jié)
以上是生活随笔為你收集整理的python 执行shell命令行效率提升_在python脚本中执行shell命令的方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 泰坦尼克号数据_如何使用Pandas进行
- 下一篇: python integer_【Pyth