日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

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

發(fā)布時(shí)間:2025/3/20 python 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 执行shell命令行效率提升_在python脚本中执行shell命令的方法 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

使用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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。