日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

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

Python執(zhí)行外部命令subprocess的使用詳解

瀏覽:7日期:2022-06-19 17:11:53
目錄一、了解subprocess1、subprocess.run()方法2、Popen類二、補(bǔ)充os模塊執(zhí)行外部命令1、os.system()方法2、os.popen()用法一、了解subprocess subeprocess模塊是python自帶的模塊,無(wú)需安裝,主要用來(lái)取代一些就的模塊或方法,如os.system、os.spawn*、os.popen、commands.*等。 因此執(zhí)行外部命令優(yōu)先使用subprocess模塊1、subprocess.run()方法

subprocess.run()方法是官方推薦的方法,幾乎所有的工作都可以用它來(lái)完成。如下是函數(shù)源碼:

subprocess.run(args, *,stdin=None,input=None,stdout=None,stderr=None,shell=False,ced=None,timeout=None,check=False,enccoding=None,error=None)

該函數(shù)返回一個(gè)CompletedProcess類(有屬性傳入?yún)?shù)及返回值)的實(shí)例,該函數(shù)的參數(shù)有很多,只需要記住常用的即可

1、args : 代表需要在操作系統(tǒng)中執(zhí)行的命令,可以是字符串形式(要求shell=True),也可以是list列表類型2、* :代表可變參數(shù),一般是列表或者字典類型3、stdin、stdout、stderr :指定了可執(zhí)行程序的標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出、標(biāo)準(zhǔn)錯(cuò)誤文件句柄4、shell :代表著程序是否需要在shell上執(zhí)行,當(dāng)想使用shell的特性時(shí),設(shè)置shell=True,這樣就可以使用shell指令的管道、文件名稱通配符、環(huán)境變量等,不過(guò)python也提供了很多類似shell的模塊,如glob、fnmatch、os.walk()、os.path.expandvars()、os.path.expanduser()和shutil。5、check :如果check設(shè)置為T(mén)rue,就檢查命令的返回值,當(dāng)返回值為0時(shí),將拋出AclledProcessError的異常6、timeout :設(shè)置超時(shí)時(shí)間,如果超時(shí)則kill掉子進(jìn)程

1.使用字符串方式執(zhí)行shell命令

[root@localhost python]# vim 1.py#!/bin/env python3import subprocessb=subprocess.run('ls -l /ltp | head -2', shell=True) # 執(zhí)行run方法,并將返回值賦值給b# total 184980# -rw-r--r--. 1 root root 10865 May 8 16:21 123.txtprint(b) # 執(zhí)行該run函數(shù)后返回的CompletedProcess類# CompletedProcess(args=’ls -l /ltp | head -2’, returncode=0)print(b.args) # 打印出CompletedProcess類的agrs屬性值,就是執(zhí)行的shell命令# ls -l /ltp | head -2print(b.returncode) # 打印命令執(zhí)行的狀態(tài)碼# 0

結(jié)果展示

[root@localhost python]# ./1.pytotal 184980-rw-r--r--. 1 root root 10865 May 8 16:21 123.txt

CompletedProcess(args=’ls -l /ltp | head -2’, returncode=0)2

ls -l /ltp | head -2

0

2.使用列表方式執(zhí)行

個(gè)人感覺(jué)方法二不好用,尤其是想要使用管道符號(hào)是,很難用

#!/bin/env python3import subprocessb = subprocess.run(['ls', '-l', '/ltp'])print(b)print(b.args)print(b.returncode)

執(zhí)行結(jié)果

[root@localhost python]# ./2.pytotal 10865-rw-r--r--. 1 root root 10865 May 8 16:21 123.txtCompletedProcess(args=[’ls’, ’-l’, ’/ltp’], returncode=0)[’ls’, ’-l’, ’/ltp’]0

3.捕獲腳本輸出

如果需要采集命令執(zhí)行的結(jié)果,可以傳入?yún)?shù)stdout=subprocess.PIPE

[root@localhost python]# cat 3.py#!/bin/env python3import subprocess# 傳入stdout=subprocess.PIPE參數(shù)即可b=subprocess.run('ls -l /ltp | head -2', shell=True, stdout=subprocess.PIPE)print(b.stdout)

結(jié)果顯示

[root@localhost python]# ./1.pyb’total 184980n-rw-r--r--. 1 root root 10865 May 8 16:21 123.txtn’

4.檢測(cè)異常

示例1:模擬renturncode值不為0

傳入?yún)?shù)check=True,當(dāng)返回值不為0時(shí),就會(huì)拋出異常

[root@localhost python]# cat 1.py#!/bin/env python3import subprocessb=subprocess.run('ls -l /123 | head -2 && exit 1', shell=True, stdout=subprocess.PIPE, check=True)print(b.returncode)

執(zhí)行結(jié)果:返回了CalledProcessError 類型報(bào)錯(cuò)

[root@localhost python]# ./1.pyls: cannot access /123: No such file or directoryTraceback (most recent call last): File './1.py', line 3, in <module> b=subprocess.run('ls -l /123 | head -2 && exit 1', shell=True, stdout=subprocess.PIPE, check=True) File '/usr/local/python3/lib/python3.7/subprocess.py', line 487, in run output=stdout, stderr=stderr)subprocess.CalledProcessError: Command ’ls -l /123 | head -2 && exit 1’ returned non-zero exit status 1.# 返回了 CalledProcessError 類型報(bào)錯(cuò)

示例2:模擬執(zhí)行超時(shí)

返回 TimeoutExpired 異常

[root@localhost python]# vim 1.py#!/bin/env python3import subprocessb=subprocess.run('while 2>1;do sleep 1;done',timeout=3, shell=True, stdout=subprocess.PIPE, check=True)print(b.returncode)

顯示結(jié)果

[root@localhost python]# ./1.pyTraceback (most recent call last): File '/usr/local/python3/lib/python3.7/subprocess.py', line 474, in run stdout, stderr = process.communicate(input, timeout=timeout) File '/usr/local/python3/lib/python3.7/subprocess.py', line 939, in communicate stdout, stderr = self._communicate(input, endtime, timeout) File '/usr/local/python3/lib/python3.7/subprocess.py', line 1682, in _communicate self._check_timeout(endtime, orig_timeout) File '/usr/local/python3/lib/python3.7/subprocess.py', line 982, in _check_timeout raise TimeoutExpired(self.args, orig_timeout)subprocess.TimeoutExpired: Command ’while 2>1;do sleep 1;done’ timed out after 3 seconds

During handling of the above exception, another exception occurred:

Traceback (most recent call last): File './1.py', line 3, in <module> b=subprocess.run('while 2>1;do sleep 1;done',timeout=3, shell=True, stdout=subprocess.PIPE, check=True) File '/usr/local/python3/lib/python3.7/subprocess.py', line 479, in run stderr=stderr)subprocess.TimeoutExpired: Command ’while 2>1;do sleep 1;done’ timed out after 3 seconds

2、Popen類

1.初步認(rèn)識(shí)Popen類

首先來(lái)看一下Popen類的構(gòu)造函數(shù)

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ù)字符串或列表bufsize0 : 無(wú)緩沖

參數(shù) 字符串或列表 bufsize 0 : 無(wú)緩沖 1 : 行緩沖 其他正數(shù)值 :緩沖區(qū)大小 負(fù)數(shù)值 :采用默認(rèn)的系統(tǒng)緩沖(一般是全緩沖) executable 一般不用,args 字符串或列表 的第一項(xiàng)表示程序名 stdin stdout stderr None : 沒(méi)有任何重定向 繼承父進(jìn)程 PIPE : 創(chuàng)建管道 文件對(duì)象 文件描述符(整數(shù)) stderr也可以設(shè)置為stdout preexec_fn 鉤子函數(shù),在fork和exec之間執(zhí)行 close_fds unix 下執(zhí)行新進(jìn)程前是否關(guān)閉0/1/2之外的文件 windows 下不繼承還是繼承父進(jìn)程的文件描述 shell 若為T(mén)rue的話 : 在unix 下相當(dāng)于在args前面添加了 “/bin/bash” “-c' 在windows下,相當(dāng)于添加了'cmd.exe /c” cwd 設(shè)置工作目錄 env 設(shè)置環(huán)境變量 unviersal_newlines 各種換行符統(tǒng)一處理成'n' startupinfo windows下傳遞給CreateProcess的結(jié)構(gòu)體 creationflags windows下,傳遞CREATE_NEW_CONSOLE創(chuàng)建自己的控制臺(tái)窗口

2.Popen的使用方法

1、subprocess.Popen([“cat”, “abc.txt”])2、subprocess.Popen(“cat abc.txt”, shell=True)

上面的第二種其實(shí)就相當(dāng)于:subprocess.Popen(['/bin/bash', “-c”, “cat abc.txt”])

示例:

[root@localhost python]# cat 3.py#!/bin/env python3import subprocessobj = subprocess.Popen('ls -l /ltp', shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)error_info = obj.stderr.read()out_info = obj.stdout.read()result = out_info + error_infoprint(result)[root@localhost python]# ./3.pytotal 184980-rw-r--r--. 1 root root 10865 May 8 16:21 123.txt-rw-r--r--. 1 root root 802 Apr 21 09:42 ab.shdrwxr-xr-x. 3 root root 101 Apr 1 18:34 auth-rw-r--r--. 1 root root 5242880 Mar 18 13:20 bigfile-rwxrwxrwx. 1 root root 1392 Feb 5 09:24 dingding.sh

Popen類的對(duì)象方法

名稱 功能 poll() 檢查是否結(jié)束,設(shè)置返回值 wait() 等待結(jié)束,設(shè)置返回值 communicate() 參數(shù)是標(biāo)準(zhǔn)輸入,返回標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)出錯(cuò) send_signal() 發(fā)動(dòng)信號(hào)(主要指linux下有用) terminate() 終止進(jìn)程,unix對(duì)應(yīng)的SIGTERM信號(hào),windows下調(diào)用api函數(shù)TerminateProcess() kill() 殺死進(jìn)程(unix對(duì)應(yīng)SIGKILL信號(hào)),windows下同上 stdin stdout stderr 參數(shù)中指定PIPE時(shí)有用 pid 進(jìn)程id returncode 進(jìn)程返回值

補(bǔ)充:其他方法

1、subeprocess.call(*args,**kwargs): call()方法調(diào)用Popen()執(zhí)行程序,并且等待它執(zhí)行完成2、subpeocess.check_call(*args, **kwargs): 調(diào)用上面的call(),如果返回值非零,返回異常3、subprocess.check_output(*args, **kwargs) : 調(diào)用Popen()執(zhí)行程序,并返回標(biāo)準(zhǔn)輸出

二、補(bǔ)充os模塊執(zhí)行外部命令1、os.system()方法

示例:

[root@localhost python]# cat 4.py#!/bin/env python3import os# 變量ret接收命令執(zhí)行后的返回值ret = os.system(’ls -l /ltp |head -2’)print('n執(zhí)行成功' if ret == 0 else 'n執(zhí)行失敗')

執(zhí)行結(jié)果

[root@localhost python]# ./4.pytotal 184980-rw-r--r--. 1 root root 10865 May 8 16:21 123.txt

執(zhí)行成功

2、os.popen()用法

與subprocess.Popen()類似,就不寫(xiě)了

補(bǔ)充:subprocess.run()和subprocess.Popen()的執(zhí)行結(jié)果是寫(xiě)入到緩存的,可以執(zhí)行結(jié)束后打印結(jié)果,不會(huì)實(shí)時(shí)在終端輸出;而os.system()是實(shí)時(shí)輸出到終端界面的;

以上就是Python執(zhí)行外部命令subprocess的詳細(xì)內(nèi)容,更多關(guān)于Python執(zhí)行外部命令的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Python 編程
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
久久精品超碰| 丝袜诱惑制服诱惑色一区在线观看 | 狠狠久久伊人| 麻豆国产精品| 成人亚洲一区二区| 国产精品永久| 麻豆视频久久| 国产精品久久久久久久久久10秀| 精品午夜视频| 99精品在线观看| 亚洲少妇一区| 亚洲精品大片| 久久中文字幕一区二区| 日韩成人三级| 午夜国产精品视频| 快she精品国产999| 日韩区一区二| 精品一区二区三区中文字幕视频| 亚洲精品**中文毛片| 欧美国产91| 久久国产三级精品| 国产一区国产二区国产三区| 亚洲高清二区| 日韩欧美激情| 国产精品福利在线观看播放| 成人av动漫在线观看| 欧美中文高清| 在线日韩电影| 国产免费播放一区二区| 久久久久久久久久久妇女| 亚洲深深色噜噜狠狠爱网站| 国产伦理久久久久久妇女| 色综合www| 欧美亚洲自偷自偷| 一区在线视频观看| 国产福利亚洲| 九九久久婷婷| 久久精品国产一区二区| 国产免费成人| 久久久久.com| 欧美精品导航| 亚洲免费资源| 伊人久久婷婷| 亚洲精品国产嫩草在线观看| 日韩欧美高清一区二区三区| 日韩精品欧美激情一区二区| 日韩国产欧美三级| 美女黄网久久| 在线日韩成人| av资源中文在线天堂| 午夜久久av | 久久免费高清| 久久精品一区| 欧美日韩一区二区三区四区在线观看 | 国产精品二区影院| 视频在线观看一区二区三区| 久久久精品网| 另类中文字幕国产精品| 国语精品一区| 国产乱子精品一区二区在线观看| 免费成人在线观看| 久久九九99| 欧美日韩一区二区综合| 欧美成人精品午夜一区二区| 亚洲精品伊人| 蜜桃视频在线网站| 激情综合在线| 欧美一级精品| 久久网站免费观看| 国产综合精品| 在线国产一区二区| aa亚洲婷婷| 热久久国产精品| 日韩精品久久久久久| 亚洲免费影视| 中文字幕成人| 欧美午夜网站| 综合日韩av| 日韩午夜免费| 日韩高清中文字幕一区| 久久99精品久久久久久园产越南 | 久热精品在线| 国产精品久久久久久久久久齐齐 | 日韩精彩视频在线观看| 亚洲精品大全| 国产精品久久久久久久久久白浆 | 国产精品一区二区99| 精品久久福利| 激情五月综合| 国产精品亲子伦av一区二区三区| 欧美国产小视频| 欧美日韩激情在线一区二区三区| 日韩国产在线观看| 亚洲成人va| 青青伊人久久| 中文字幕系列一区| 国内自拍视频一区二区三区| 日韩av一级| 日韩免费精品| 欧美午夜精彩| 国产精品久久777777毛茸茸| 亚洲香蕉网站| 国产成人精品免费视| 五月激激激综合网色播| 日本精品不卡| 日韩国产在线不卡视频| 精品免费av| 日韩高清国产一区在线| 激情久久中文字幕| 麻豆精品新av中文字幕| 石原莉奈一区二区三区在线观看| 国产一区一一区高清不卡| 免费日韩av片| 久久精品播放| 国产精品成人a在线观看| 国产日产精品一区二区三区四区的观看方式| 午夜久久中文| 都市激情国产精品| 精品国产成人| 久久精品天堂| 美女毛片一区二区三区四区最新中文字幕亚洲 | 国产中文一区| 国产精品原创| 国产一区二区三区四区二区| 欧美日韩视频免费看| 亚洲精品护士| 美女黄网久久| 亚洲精品无播放器在线播放| 亚洲在线成人| 国产精品色网| 日韩在线网址| 午夜视频一区二区在线观看| 美女黄网久久| 日韩黄色av| 国产精品1luya在线播放| 电影91久久久| 久久久成人网| 在线综合欧美| 欧美日韩在线精品一区二区三区激情综合 | 国产精品www.| 国产福利一区二区精品秒拍| 精品黄色一级片| 久久电影tv| 久久av一区二区三区| 欧美一区二区三区久久精品| 精品三级av| 亚洲欧美日韩高清在线| 亚洲资源网站| 欧美国产先锋| 国产尤物精品| 青草av.久久免费一区| 成人在线丰满少妇av| aⅴ色国产欧美| 国产精品久久久久77777丨| 欧美13videosex性极品| 国产在线欧美| 国产私拍福利精品视频二区| 在线看片国产福利你懂的| 亚洲免费网址| 97人人精品| 日韩国产精品久久久| 亚洲播播91| 91精品国产自产在线丝袜啪| 日韩精品诱惑一区?区三区| 亚洲精品在线二区| 久久三级视频| 老色鬼精品视频在线观看播放| 日韩视频不卡| 日韩成人精品一区| 日本欧美一区二区在线观看| 97人人精品| 国产精品一国产精品| 三级欧美在线一区| 日韩精品首页| 高清一区二区三区| 日韩av不卡一区二区| 九九久久婷婷| 欧洲亚洲一区二区三区| 欧美激情一区| 国产伦理久久久久久妇女| 三级在线观看一区二区| 欧美性感美女一区二区| 色乱码一区二区三区网站| 国产精品一区二区av交换| 日韩毛片网站| 免费视频最近日韩| 在线一区免费观看| 99在线精品视频在线观看| 欧美精品一二| 黄色成人91| 久久国产精品99国产| 西西人体一区二区| 国产精品欧美在线观看| 国产精品免费看| 中国字幕a在线看韩国电影| 免费在线观看一区| 精品国产网站| 日产精品一区二区| 久久久精品日韩| 国产综合色产|