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

您的位置:首頁技術文章
文章詳情頁

Python執行外部命令subprocess的使用詳解

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

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

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

該函數返回一個CompletedProcess類(有屬性傳入參數及返回值)的實例,該函數的參數有很多,只需要記住常用的即可

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

1.使用字符串方式執行shell命令

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

結果展示

[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.使用列表方式執行

個人感覺方法二不好用,尤其是想要使用管道符號是,很難用

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

執行結果

[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.捕獲腳本輸出

如果需要采集命令執行的結果,可以傳入參數stdout=subprocess.PIPE

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

結果顯示

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

4.檢測異常

示例1:模擬renturncode值不為0

傳入參數check=True,當返回值不為0時,就會拋出異常

[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)

執行結果:返回了CalledProcessError 類型報錯

[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 類型報錯

示例2:模擬執行超時

返回 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)

顯示結果

[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.初步認識Popen類

首先來看一下Popen類的構造函數

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):

參數字符串或列表bufsize0 : 無緩沖

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

2.Popen的使用方法

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

上面的第二種其實就相當于: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類的對象方法

名稱 功能 poll() 檢查是否結束,設置返回值 wait() 等待結束,設置返回值 communicate() 參數是標準輸入,返回標準輸出和標準出錯 send_signal() 發動信號(主要指linux下有用) terminate() 終止進程,unix對應的SIGTERM信號,windows下調用api函數TerminateProcess() kill() 殺死進程(unix對應SIGKILL信號),windows下同上 stdin stdout stderr 參數中指定PIPE時有用 pid 進程id returncode 進程返回值

補充:其他方法

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

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

示例:

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

執行結果

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

執行成功

2、os.popen()用法

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

補充:subprocess.run()和subprocess.Popen()的執行結果是寫入到緩存的,可以執行結束后打印結果,不會實時在終端輸出;而os.system()是實時輸出到終端界面的;

以上就是Python執行外部命令subprocess的詳細內容,更多關于Python執行外部命令的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
韩日一区二区| 亚洲高清激情| 中文字幕日韩欧美精品高清在线| 999精品一区| 成人精品亚洲| 久久精品国产亚洲夜色av网站| 国产精品激情| 国产高清视频一区二区| 麻豆高清免费国产一区| 精品视频在线观看网站| 成人午夜在线| av一区在线| 蜜臀久久99精品久久一区二区| 久久中文亚洲字幕| 国产亚洲亚洲| 亚洲精品福利| 久久狠狠亚洲综合| 国产精品草草| 红杏一区二区三区| 久久一区二区三区电影| 国产精品毛片| 一级成人国产| 欧美午夜三级| 美女久久精品| 欧美片第1页| 夜久久久久久| 免费观看久久av| 美女精品一区| 91麻豆精品激情在线观看最新| 久久激情五月激情| 日韩av有码| 国产一区导航| 国产亚洲久久| 黄色在线网站噜噜噜| 激情五月综合网| 久久性天堂网| 欧美日本久久| 大香伊人久久精品一区二区 | 日韩精品一级二级| 欧美午夜三级| 精品日韩视频| 亚洲欧美在线综合| 卡一精品卡二卡三网站乱码| 欧美日韩精品免费观看视欧美高清免费大片 | 日韩中文字幕区一区有砖一区| 在线精品一区| 免费在线亚洲欧美| 蜜桃国内精品久久久久软件9| 综合激情婷婷| 国语精品一区| 丝袜美腿一区二区三区| 欧美国产日本| 一区久久精品| 欧美极品一区二区三区| 欧美福利专区| 国产精品亚洲人成在99www| 精品免费av在线| 日韩不卡手机在线v区| 国产精品成人一区二区不卡| 婷婷精品进入| 国产精品videossex| 国产精品毛片一区二区在线看| 免费观看久久av| 美腿丝袜在线亚洲一区| 婷婷综合网站| 国产精品观看| 免费人成在线不卡| 欧美激情另类| 天海翼亚洲一区二区三区| 激情国产在线| 国产亚洲一卡2卡3卡4卡新区| 免费黄色成人| 精品国产网站| 日本中文字幕一区二区| 日韩国产一区| 国产精品久久国产愉拍| 免播放器亚洲一区| 五月激情久久| 久久精品伊人| 日本不卡视频一二三区| 美女毛片一区二区三区四区| 麻豆91小视频| 日韩av网站在线观看| 激情91久久| 亚洲成人精品| 九九九精品视频| 日韩精品免费视频人成| 影视先锋久久| 色综合五月天| 日韩激情中文字幕| 狠狠色综合网| 性感美女一区二区在线观看| 免费在线日韩av| 欧美日韩一区二区三区四区在线观看| 尤物在线精品| 91精品一区二区三区综合| 麻豆一区二区在线| 日本在线观看不卡视频| 六月婷婷一区| 欧美二区视频| 91精品精品| 日本美女一区| 成午夜精品一区二区三区软件| 欧美日韩亚洲国产精品| 午夜免费一区| 欧美一级精品| 久久久水蜜桃av免费网站| 久久精品色播| 九九九精品视频| 精品一区二区三区亚洲| 日韩av中文字幕一区| 亚洲一区二区av| 亚洲欧美日韩一区在线观看| 一区免费视频| 99国产精品| 欧美在线资源| 久久人人88| 亚洲高清毛片| 国产一区清纯| 国产成人精选| 国产精品分类| 美女视频黄免费的久久| 国产极品一区| 国语对白精品一区二区| 国产96在线亚洲| 中文一区一区三区高中清不卡免费| 精品免费在线| 日韩伦理在线一区| 日韩毛片在线| 1000部精品久久久久久久久| 久久精品国产99久久| 欧美特黄一级大片| 国精品一区二区三区| 久久国产日韩| 日韩精品dvd| 久久人人精品| 91精品1区| 国产亚洲亚洲| 亚洲精品一级| 国产精品美女午夜爽爽| 久久伊人亚洲| 免费看av不卡| 国产综合欧美| 在线日韩成人| 欧美精品aa| 高清一区二区| 不卡在线一区| 日本在线不卡视频| 久久99精品久久久野外观看| 国产在线不卡一区二区三区| 国产高潮在线| 香蕉成人av| 国产精品嫩草99av在线| 免费的成人av| 国产日韩欧美一区在线| 国产福利亚洲| 不卡一二三区| 欧美午夜不卡| 91精品国产自产精品男人的天堂| 国产极品嫩模在线观看91精品| 亚洲国产福利| 婷婷亚洲五月| 国产日韩中文在线中文字幕| 国产精品99在线观看| 色婷婷精品视频| 久久亚洲电影| 精品视频黄色| 国产视频亚洲| 91精品国产自产观看在线| 国产精品久久观看| 亚洲激情另类| 欧美精品第一区| 欧美日韩国产在线一区| 国产日本精品| 久久久久久久久久久9不雅视频| 亚洲另类黄色| 黑森林国产精品av| 视频一区二区三区入口| 国产欧美啪啪| 999久久久国产精品| 偷拍亚洲精品| 日韩激情一区| 日韩动漫一区| 久久久噜噜噜| 国产精品一区二区三区美女| 天堂网av成人| 日本欧美在线| 久久精品国产大片免费观看| 久久国际精品| 五月综合激情| 精品国产乱码久久久| 性色一区二区| 成人午夜在线| 亚洲区第一页| 国产黄大片在线观看| 亚洲精品一二| 亚洲高清毛片| 精品一区二区三区四区五区| 蜜桃久久精品一区二区| 美女av在线免费看|