色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁技術(shù)文章
文章詳情頁

使用python執(zhí)行shell腳本 并動態(tài)傳參 及subprocess的使用詳解

瀏覽:4日期:2022-08-03 16:53:46

最近工作需求中 有遇到這個情況 在web端獲取配置文件內(nèi)容 及 往shell 腳本中動態(tài)傳入?yún)?shù)

執(zhí)行shell腳本這個有多種方法 最后還是選擇了subprocess這個python標(biāo)準(zhǔn)庫

subprocess這個模塊可以非常方便的啟動一個子進(jìn)程,并且控制其輸入和輸出

Class Popen(args,bufsize = 0,executable=None, stdin =None,stdout =None,stderr =None, preexec_fn = None,close_fds = False,shell = False, cwd = None,env = None,universal_newlines = False, startupinfo = None,creationflags = 0):

參數(shù)是:

args 應(yīng)該是一個字符串,或一系列程序參數(shù)。要執(zhí)行的程序通常是args序列或字符串中的第一項(xiàng),但可以使用可執(zhí)行參數(shù)進(jìn)行顯式設(shè)置。

在UNIX上,與shell=False(默認(rèn)):在這種情況下,POPEN 類使用os.execvp()來執(zhí)行子程序。 args通常應(yīng)該是一個序列。一個字符串將被視為一個字符串作為唯一項(xiàng)目(要執(zhí)行的程序)的序列。

在UNIX上,使用shell = True:如果args是一個字符串,則它指定要通過shell執(zhí)行的命令字符串。如果args是一個序列,則第一個項(xiàng)目指定命令字符串,并且任何其他項(xiàng)目將被視為附加的shell參數(shù)。

可以先創(chuàng)建一個簡單的shell腳本 a.sh

$1 $2 分別代表傳進(jìn)腳本的 第一個和第二個參數(shù)

使用python執(zhí)行shell腳本 并動態(tài)傳參 及subprocess的使用詳解

使用python執(zhí)行shell腳本 并動態(tài)傳參 及subprocess的使用詳解

如果不寫shell=True,默認(rèn)為shell=False,需要在args的第一個參數(shù)指定執(zhí)行器路徑

使用python執(zhí)行shell腳本 并動態(tài)傳參 及subprocess的使用詳解

bufsize 如果給出,bufsize與內(nèi)建的open()函數(shù)的相應(yīng)參數(shù)具有相同的含義:0表示無緩沖,1表示行緩沖,任何其他正值意味著使用(大約)該大小的緩沖區(qū)。負(fù)bufsize意味著使用系統(tǒng)默認(rèn)值,通常意味著完全緩沖。bufsize的默認(rèn)值是0(無緩沖)。

stdin,stdout和stderr分別指定執(zhí)行的程序的標(biāo)準(zhǔn)輸入,標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯誤文件句柄。有效值是PIPE,現(xiàn)有文件描述符(正整數(shù)),現(xiàn)有文件對象和 None。 PIPE表示應(yīng)該創(chuàng)建一個新的管道給孩子。隨著無,則不會發(fā)生重定向; 孩子的文件句柄將從父類繼承。另外,stderr 可以是STDOUT,它表示應(yīng)用程序的stderr數(shù)據(jù)應(yīng)該被捕獲到與stdout相同的文件句柄中。

在Popen對象中,可以設(shè)值subprocess.stdout=PIPE 即通過管道 p.stdout.read()取出 該進(jìn)程的標(biāo)準(zhǔn)輸出

preexec_fn 如果將preexec_fn設(shè)置為可調(diào)用對象,則該對象將在子進(jìn)程執(zhí)行前被調(diào)用。

如果close_fds為true,則在執(zhí)行子進(jìn)程之前,將關(guān)閉除0,1和2之外的所有文件描述符。

如果shell為true,則指定的命令將通過shell執(zhí)行。

如果cwd不是None,那么在執(zhí)行子代之前,當(dāng)前目錄將更改為cwd。

如果env不是None,它將為新進(jìn)程定義環(huán)境變量。

如果設(shè)置universal_newlines為true,則文件對象stdout和stderr將作為文本文件打開,但可能會有 n,Unix行尾約定 r,Macintosh約定或 r n中的任何行終止, Windows約定。所有這些外部表示被Python程序視為 n。注意:此功能僅在Python是使用通用換行支持(默認(rèn))構(gòu)建時才可用。此外,文件對象stdout,stdin和stderr的newlines屬性不會被communications()方法更新。

如果設(shè)置了STARTUPINFO和creationflags,將被傳遞到下層的CreateProcess()函數(shù)。他們可以指定諸如主窗口的外觀和新過程的優(yōu)先級等內(nèi)容。(僅限Windows)

Popen對象的一些方法

Popen.poll() 檢查子進(jìn)程是否終止,返回對象的returncode

Popen.wait() 等待子進(jìn)程完成,阻塞。返回returncode

Popen.communicate(input=None) 將信息輸入到進(jìn)程,從stdout和stderr中讀取數(shù)據(jù),直到達(dá)到文件結(jié)尾。等待進(jìn)程終止。可選的stdin參數(shù)應(yīng)該是要發(fā)送到子進(jìn)程的字符串,如果沒有數(shù)據(jù)應(yīng)發(fā)送給子進(jìn)程,則為None。

返回一個元組(stdout,stderr) 但是讀取的數(shù)據(jù)緩存在內(nèi)存中,所以如果數(shù)據(jù)量很大或者無限,就不要使用這種方法

Popen.pid 返回子進(jìn)程的pid

Popen.returncode 讀取進(jìn)程的狀態(tài)碼

None —— 子進(jìn)程尚未結(jié)束;==0 —— 子進(jìn)程正常退出;> 0—— 子進(jìn)程異常退出,returncode對應(yīng)于出錯碼;< 0—— 子進(jìn)程被信號殺掉了。

Popen.kill() 殺死進(jìn)程

以上這篇使用python執(zhí)行shell腳本 并動態(tài)傳參 及subprocess的使用詳解就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 亚洲精品手机在线观看 | 精品在线视频观看 | 欧美成人免费在线观看 | 精品在线免费视频 | 欧美成人看片一区二区三区 | 久久天天躁综合夜夜黑人鲁色 | 在线看精品 | 国产99视频精品免视看9 | 亚洲欧美日韩在线精品一区二区 | 国产高清国产专区国产精品 | 中文国产日韩欧美视频 | 国产人成精品综合欧美成人 | 国产大乳孕妇喷奶水在线观看 | 亚洲 欧美 激情 另类 自拍 | 国产成人免费高清视频 | 亚洲精品国产精品国自产网站 | 欧美一级免费片 | 成人免费视频在 | 成年人看的毛片 | 欧美精品在线免费观看 | 永久精品免费影院在线观看网站 | 欧美成人3d动漫专区 | 亚洲毛片在线免费观看 | 怡红院亚洲红怡院天堂麻豆 | xxxwww在线播放 | 一级毛片私人影院老司机 | 欧洲免费无线码一二区 | 亚洲欧美中文字幕在线网站 | 国产婷婷成人久久av免费高清 | 永久精品免费影院在线观看网站 | 亚洲男女网站 | 成年人免费观看视频网站 | 久久er精品热线免费 | 日韩亚洲一区二区三区 | 成人免费在线网站 | 国产一区二区三区不卡免费观看 | 亚洲精品中文字幕一区在线 | 美女视频很黄很a免费国产 美女视频黄.免费网址 | 亚洲男女视频 | 日韩国产成人精品视频 | 好吊色综合网天天高清 |