這篇文章將為大家詳細(xì)講解有關(guān)Python執(zhí)行腳本方法都有哪些,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。
創(chuàng)新互聯(lián)公司一直通過(guò)網(wǎng)站建設(shè)和網(wǎng)站營(yíng)銷(xiāo)幫助企業(yè)獲得更多客戶(hù)資源。 以"深度挖掘,量身打造,注重實(shí)效"的一站式服務(wù),以成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)、移動(dòng)互聯(lián)產(chǎn)品、成都營(yíng)銷(xiāo)網(wǎng)站建設(shè)服務(wù)為核心業(yè)務(wù)。十余年網(wǎng)站制作的經(jīng)驗(yàn),使用新網(wǎng)站建設(shè)技術(shù),全新開(kāi)發(fā)出的標(biāo)準(zhǔn)網(wǎng)站,不但價(jià)格便宜而且實(shí)用、靈活,特別適合中小公司網(wǎng)站制作。網(wǎng)站管理系統(tǒng)簡(jiǎn)單易用,維護(hù)方便,您可以完全操作網(wǎng)站資料,是中小公司快速網(wǎng)站建設(shè)的選擇。
Python中調(diào)用shell腳本,常用的函數(shù)有os.system、os.popen()和subprocess.Popen()
os.system方法
語(yǔ)法:os.system(cmd)
os.system()執(zhí)行過(guò)程中主要執(zhí)行了:fork()出一子進(jìn)程;子進(jìn)程調(diào)用exec()執(zhí)行命令。
例1:
>>> import os >>> os.system('dir D:\Python')
執(zhí)行成功,返回0。
例2:
import os res = os.system('ping www.baidu.com -n 3') if res == 0: print('成功') else: print('失敗了')
執(zhí)行結(jié)果:
注:
1).os.system()執(zhí)行cmd指令,返回結(jié)果0表示執(zhí)行成功,返回1表示失敗。
2).os.system()無(wú)法獲取在cmd輸出的內(nèi)容。
3).os.system()調(diào)用外部系統(tǒng)命令,返回命令結(jié)果碼,無(wú)法獲取命令執(zhí)行輸出結(jié)果。
os.popen方法
語(yǔ)法:popen(cmd, mode='r', buffering = -1)
參數(shù):
cmd:要執(zhí)行的命令。 mode:打開(kāi)文件的模式,默認(rèn)為'r',用法與open()相同。 buffering:(可選參數(shù)),0表無(wú)緩沖;1表行緩沖;-1表默認(rèn)緩沖值;
os.popen()方法會(huì)打開(kāi)一管道,返回結(jié)果是一連接管道的文件對(duì)象。執(zhí)行成功返回文件對(duì)象中讀取的返回結(jié)果,不返回狀態(tài)碼。執(zhí)行失敗,返回執(zhí)行的錯(cuò)誤信息。并且返回結(jié)果可賦于一變量,便于程序的處理。
例1:
文件內(nèi)容:D:\Python\test.py
print('popen()測(cè)試')
文件內(nèi)容:D:\Python\test2.py
res = os.popen(r'D:\Python\test.py', mode='r') res1 = res.read() #返回結(jié)果賦于一變量,便于程序的處理 print(res1) print(type(res1)) #返回str res.close()
python D:\Python\test2.py 執(zhí)行結(jié)果:
subprocess模塊
os.system、os.popen實(shí)現(xiàn)的功能在subprocess模塊都可實(shí)現(xiàn),推薦使用。并且subprocess模塊還可調(diào)用外部系統(tǒng)命令來(lái)創(chuàng)建新子進(jìn)程。subprocess執(zhí)行系統(tǒng)命令的時(shí)候并不會(huì)讓主進(jìn)程去執(zhí)行,而是主進(jìn)程會(huì)開(kāi)辟fork()出一個(gè)子進(jìn)程去執(zhí)行,并不會(huì)影響到主進(jìn)程的運(yùn)行。
subprocess模塊主要有call()、Popen()函數(shù)。
3.1 subprocess.Popen()函數(shù)
語(yǔ)法:
subprocess.Popen(args, bufsize, executable, stdin, stdout, stderr, preexec_fn, close_fds, shell, cwd, env, universal_newlines, startupinfo, creationflags)
args:要調(diào)用的外部系統(tǒng)命令。
bufsize:默認(rèn)值為0, 表示不緩存;為1表示行緩存;其他正數(shù)表示緩存使用的大小;負(fù)數(shù)-1表示使用系統(tǒng)默認(rèn)的緩存大小。
stdin、stdout、stderr:分別表示標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤。其值有PIPE、文件描述符和None等。默認(rèn)值為None,表示從父進(jìn)程繼承。
shell:Linux中參數(shù)值為False時(shí),Linux上通過(guò)調(diào)用os.execvp執(zhí)行對(duì)應(yīng)的程序。True時(shí),Linux上直接調(diào)用系統(tǒng)shell來(lái)執(zhí)行程序。Windows中參數(shù)shell設(shè)為true,程序?qū)⑼ㄟ^(guò)shell來(lái)執(zhí)行。
cwd:設(shè)置子進(jìn)程當(dāng)前目錄。
env:env是字典類(lèi)型,指定子進(jìn)程的環(huán)境變量。默認(rèn)值為None,表示子進(jìn)程的環(huán)境變量將從父進(jìn)程中繼承。
subprocess.PIPE:在創(chuàng)建Popen對(duì)象時(shí),subprocess.PIPE可以初始化stdin, stdout或stderr參數(shù),表示與子進(jìn)程通信的標(biāo)準(zhǔn)流。執(zhí)行結(jié)果丟到管道(共享內(nèi)存空間,用于進(jìn)程之間共享)。
例1:
cmd = 'ipconfig | findstr "192.168.1.128"' p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE) #將正確的執(zhí)行結(jié)果丟到管道中。 res = p.stdout.read().decode('gbk') #主進(jìn)程去管道里獲取正確stdout的結(jié)果,并將獲取的結(jié)果的bytes類(lèi)型轉(zhuǎn)換。 print(res) print(type(res))
subprocess.Popen()方法與os.popen()相比較,os.popen()獲取的輸出結(jié)果是直接可讀的,而subprocess.Popen()獲取的輸出結(jié)果是以二進(jìn)制形式的且會(huì)有換行符。
3.2 subprocess.call()函數(shù)
調(diào)用外部系統(tǒng)命令,并返回執(zhí)行結(jié)果碼。功能類(lèi)似于os.system(cmd)。0表示執(zhí)行成功,返回1表示失敗。
例子2:
import subprocess res = subprocess.call('ping www.baidu.com', shell=True) print('>>> ping www.baidu.com') print('測(cè)試res:', res)
結(jié)果:
關(guān)于Python執(zhí)行腳本方法都有哪些就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。
本文題目:Python執(zhí)行腳本方法都有哪些
當(dāng)前網(wǎng)址:http://muchs.cn/article0/pdppio.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開(kāi)發(fā)、小程序開(kāi)發(fā)、網(wǎng)站設(shè)計(jì)、建站公司、ChatGPT、品牌網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)