婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Python執(zhí)行外部命令subprocess的使用詳解

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

熱門標(biāo)簽:騰訊外呼線路 海南400電話如何申請 廣告地圖標(biāo)注app 公司電話機器人 哈爾濱ai外呼系統(tǒng)定制 激戰(zhàn)2地圖標(biāo)注 白銀外呼系統(tǒng) 陜西金融外呼系統(tǒng) 唐山智能外呼系統(tǒng)一般多少錢

一、了解subprocess

  • subeprocess模塊是python自帶的模塊,無需安裝,主要用來取代一些就的模塊或方法,如os.system、os.spawn*、os.popen、commands.*等。
  • 因此執(zhí)行外部命令優(yōu)先使用subprocess模塊

1、subprocess.run()方法

subprocess.run()方法是官方推薦的方法,幾乎所有的工作都可以用它來完成。
如下是函數(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ù)返回一個CompletedProcess類(有屬性傳入?yún)?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)錯誤文件句柄
4、shell :代表著程序是否需要在shell上執(zhí)行,當(dāng)想使用shell的特性時,設(shè)置shell=True,這樣就可以使用shell指令的管道、文件名稱通配符、環(huán)境變量等,不過python也提供了很多類似shell的模塊,如glob、fnmatch、os.walk()、os.path.expandvars()、os.path.expanduser()和shutil。
5、check :如果check設(shè)置為True,就檢查命令的返回值,當(dāng)返回值為0時,將拋出AclledProcessError的異常
6、timeout :設(shè)置超時時間,如果超時則kill掉子進程

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

[root@localhost python]# vim 1.py
#!/bin/env python3
import subprocess
b=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.txt

print(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 -2

print(b.returncode)   # 打印命令執(zhí)行的狀態(tài)碼
# 0

結(jié)果展示

[root@localhost python]# ./1.py
total 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í)行

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

#!/bin/env python3
import subprocess
b = subprocess.run(["ls", "-l", "/ltp"])
print(b)
print(b.args)
print(b.returncode)

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

[root@localhost python]# ./2.py
total 10865
-rw-r--r--. 1 root root     10865 May  8 16:21 123.txt
CompletedProcess(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 python3
import 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.py
b'total 184980\n-rw-r--r--. 1 root root     10865 May  8 16:21 123.txt\n'

4.檢測異常

示例1:模擬renturncode值不為0

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

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

執(zhí)行結(jié)果:返回了CalledProcessError 類型報錯

[root@localhost python]# ./1.py
ls: cannot access /123: No such file or directory
Traceback (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:模擬執(zhí)行超時

返回 TimeoutExpired 異常

[root@localhost python]# vim 1.py
#!/bin/env python3
import subprocess

b=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.py
Traceback (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)識Popen類

首先來看一下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 : 無緩沖

參數(shù) 字符串或列表
bufsize 0 : 無緩沖
1 : 行緩沖
其他正數(shù)值 :緩沖區(qū)大小
負(fù)數(shù)值 :采用默認(rèn)的系統(tǒng)緩沖(一般是全緩沖)
executable 一般不用,args 字符串或列表 的第一項表示程序名
stdin
stdout
stderr
None : 沒有任何重定向 繼承父進程
PIPE : 創(chuàng)建管道
文件對象
文件描述符(整數(shù))
stderr也可以設(shè)置為stdout
preexec_fn 鉤子函數(shù),在fork和exec之間執(zhí)行
close_fds unix 下執(zhí)行新進程前是否關(guān)閉0/1/2之外的文件
windows 下不繼承還是繼承父進程的文件描述
shell 若為True的話 :
在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)建自己的控制臺窗口

2.Popen的使用方法

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

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

示例:

[root@localhost python]# cat 3.py
#!/bin/env python3
import subprocess
obj = 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_info
print(result)

[root@localhost python]# ./3.py
total 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.sh
drwxr-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() 檢查是否結(jié)束,設(shè)置返回值
wait() 等待結(jié)束,設(shè)置返回值
communicate() 參數(shù)是標(biāo)準(zhǔn)輸入,返回標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)出錯
send_signal() 發(fā)動信號(主要指linux下有用)
terminate() 終止進程,unix對應(yīng)的SIGTERM信號,windows下調(diào)用api函數(shù)TerminateProcess()
kill() 殺死進程(unix對應(yīng)SIGKILL信號),windows下同上
stdin
stdout
stderr
參數(shù)中指定PIPE時有用
pid 進程id
returncode 進程返回值

補充:其他方法

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)輸出

二、補充os模塊執(zhí)行外部命令

1、os.system()方法

示例:

[root@localhost python]# cat 4.py
#!/bin/env python3
import 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.py
total 184980
-rw-r--r--. 1 root root     10865 May  8 16:21 123.txt

執(zhí)行成功

2、os.popen()用法

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

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

以上就是Python執(zhí)行外部命令subprocess的詳細(xì)內(nèi)容,更多關(guān)于Python執(zhí)行外部命令的資料請關(guān)注腳本之家其它相關(guān)文章!

您可能感興趣的文章:
  • Python實現(xiàn)subprocess執(zhí)行外部命令
  • Python中使用subprocess庫創(chuàng)建附加進程
  • 解決python subprocess參數(shù)shell=True踩到的坑
  • python3通過subprocess模塊調(diào)用腳本并和腳本交互的操作
  • python subprocess pipe 實時輸出日志的操作
  • 通過實例解析python subprocess模塊原理及用法
  • 解決windows下python3使用multiprocessing.Pool出現(xiàn)的問題
  • Python多進程multiprocessing、進程池用法實例分析
  • 使用python執(zhí)行shell腳本 并動態(tài)傳參 及subprocess的使用詳解
  • python process模塊的使用簡介

標(biāo)簽:惠州 常德 黑龍江 鷹潭 上海 益陽 黔西 四川

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Python執(zhí)行外部命令subprocess的使用詳解》,本文關(guān)鍵詞  Python,執(zhí)行,外部,命令,subprocess,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Python執(zhí)行外部命令subprocess的使用詳解》相關(guān)的同類信息!
  • 本頁收集關(guān)于Python執(zhí)行外部命令subprocess的使用詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    日韩久久久久久| 精品免费一区二区三区| 国产成人三级在线观看| 国产美女一区二区三区| 精品一区二区三区在线播放| 欧美韩国日本综合| 亚洲特级片在线| 日韩影院免费视频| 亚洲精品中文字幕乱码三区| 亚洲成人动漫精品| 国内精品国产成人| 91片黄在线观看| 51精品国自产在线| 欧美国产精品一区| 午夜亚洲福利老司机| 狠狠v欧美v日韩v亚洲ⅴ| 国产suv一区二区三区88区| 色成人在线视频| 日韩视频永久免费| 1024成人网| 蜜臀91精品一区二区三区| 国产精品99久久不卡二区| 91美女在线观看| 精品卡一卡二卡三卡四在线| 亚洲视频香蕉人妖| 麻豆一区二区三| 色婷婷综合久久久中文一区二区 | 91精品国产综合久久久久久久| 91小视频免费观看| 欧美xxxxx牲另类人与| 依依成人综合视频| 国产99精品在线观看| 欧美伦理视频网站| 亚洲精品亚洲人成人网 | 日韩一区二区三区高清免费看看| 国产午夜精品久久久久久免费视| 性做久久久久久久久| 成人福利视频网站| 日韩午夜激情电影| 欧美三级欧美一级| 中文字幕在线不卡国产视频| 免费在线观看成人| 欧美久久婷婷综合色| 亚洲人一二三区| 国产在线视频不卡二| 欧美高清视频不卡网| 一区二区三区av电影| 99在线精品一区二区三区| 欧美二区三区91| 亚洲一区二区视频在线观看| 国产精品91xxx| 欧美亚洲国产一区二区三区va| 日本一区二区成人| 粉嫩一区二区三区在线看| 日韩精品在线一区| 老鸭窝一区二区久久精品| 欧美午夜一区二区三区| 亚洲黄一区二区三区| 91麻豆免费观看| 亚洲欧美色综合| 91视频国产资源| 亚洲欧美自拍偷拍色图| 国产99久久久久久免费看农村| 欧美v日韩v国产v| 精品亚洲成a人| 亚洲精品一区二区三区香蕉 | 亚洲欧洲精品一区二区精品久久久 | 有码一区二区三区| 国产福利一区二区三区视频在线| 欧美一区二区福利在线| 精品日韩欧美在线| 亚洲午夜电影网| 成人自拍视频在线观看| 精品一区二区三区影院在线午夜| 99免费精品在线观看| 欧美一区二区免费视频| 亚洲精品写真福利| 91精品国产色综合久久久蜜香臀| 91捆绑美女网站| 欧美一区三区二区| 日韩电影一区二区三区四区| 色综合久久久久综合体桃花网| 91麻豆精品国产91| 亚洲日韩欧美一区二区在线| 日韩黄色在线观看| 99久久精品免费看国产免费软件| 欧美综合一区二区| 欧美大片日本大片免费观看| 亚洲妇女屁股眼交7| www.性欧美| 国产欧美一区二区精品性色| 日本成人超碰在线观看| 欧美成人a视频| 国产精品午夜在线观看| 久久精品99国产精品日本| 欧美绝品在线观看成人午夜影视| 日日摸夜夜添夜夜添亚洲女人| 欧美videofree性高清杂交| eeuss鲁一区二区三区| 亚洲成人动漫av| 久久精品人人做人人爽人人| 欧美在线短视频| 国产aⅴ综合色| 亚洲人成精品久久久久| 国产乱子轮精品视频| 欧美日韩成人在线| 亚洲一区在线电影| 精品一区二区三区免费毛片爱| 午夜精品爽啪视频| 亚洲精品成人a在线观看| 免费不卡在线视频| 69久久夜色精品国产69蝌蚪网 | 99久久精品国产精品久久| 久久一留热品黄| 欧美日韩国产一区| 欧美日韩1234| 欧洲亚洲精品在线| 亚洲妇熟xx妇色黄| 激情深爱一区二区| 国产专区欧美精品| 久久久久久久精| 国产美女精品在线| 日本一区二区三区四区在线视频| 久久精品72免费观看| 欧美大片顶级少妇| 色综合久久久久久久久久久| 亚洲成人av电影在线| 日韩三级在线免费观看| 成人av网站免费观看| 日韩精品乱码av一区二区| 99麻豆久久久国产精品免费优播| 日韩中文欧美在线| 中文字幕人成不卡一区| 久久这里只精品最新地址| 99久久国产综合精品女不卡| 亚洲欧洲av另类| 中文字幕av一区二区三区| 欧美在线你懂得| 99久久久无码国产精品| 九九精品视频在线看| 日韩在线a电影| 丝袜诱惑制服诱惑色一区在线观看| 国产精品国产三级国产普通话蜜臀 | 韩国av一区二区| 欧美经典一区二区三区| 亚洲欧洲综合另类| 高清在线观看日韩| www.亚洲在线| 精品免费日韩av| 在线欧美日韩国产| 亚洲成人黄色小说| 日韩电影一二三区| 色噜噜狠狠成人中文综合| 欧美国产视频在线| 中文字幕国产一区二区| 国产成人99久久亚洲综合精品| 亚洲国产激情av| 欧美国产欧美综合| 日韩美一区二区三区| 久久婷婷国产综合国色天香| 欧美精品 国产精品| 不卡av在线免费观看| 国产精品资源站在线| 亚洲乱码国产乱码精品精的特点 | 91网上在线视频| 精品嫩草影院久久| 亚洲一级在线观看| 久久久久免费观看| 国产乱码一区二区三区| 亚洲天堂2014| 亚洲综合视频在线观看| 天天av天天翘天天综合网色鬼国产| 色诱亚洲精品久久久久久| 99精品1区2区| 精品99一区二区| 日日骚欧美日韩| 色呦呦国产精品| 日韩欧美久久一区| 亚洲色图视频网| 成人一区二区三区中文字幕| 黑人巨大精品欧美黑白配亚洲| 欧美影视一区在线| 亚洲欧美精品午睡沙发| 视频在线在亚洲| 欧美三级电影一区| 亚洲精品成a人| 中文字幕一区三区| 国产999精品久久久久久绿帽| 欧美三日本三级三级在线播放| 精品国产制服丝袜高跟| 日本特黄久久久高潮| 91精品欧美一区二区三区综合在 | 日本欧美一区二区三区| 精品久久久久香蕉网| 免费欧美日韩国产三级电影| 精品国精品自拍自在线| 99久久免费国产| 国产亲近乱来精品视频 | 精品三级在线看| 99久久久精品|