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命令的方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 泰坦尼克号数据_如何使用Pandas进行
- 下一篇: python integer_【Pyth