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

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

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

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

一、了解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 python3
import subprocess
b=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.txt

print(b)              # 執行該run函數后返回的CompletedProcess類
# CompletedProcess(args='ls -l /ltp | head -2', returncode=0)

print(b.args)         # 打印出CompletedProcess類的agrs屬性值,就是執行的shell命令
# ls -l /ltp | head -2

print(b.returncode)   # 打印命令執行的狀態碼
# 0

結果展示

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

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

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

執行結果

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

  •  如果需要采集命令執行的結果,可以傳入參數stdout=subprocess.PIPE
[root@localhost python]# cat 3.py
#!/bin/env python3
import subprocess
# 傳入stdout=subprocess.PIPE參數即可
b=subprocess.run("ls -l /ltp | head -2", shell=True, stdout=subprocess.PIPE)

print(b.stdout)

結果顯示

[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

傳入參數check=True,當返回值不為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)

執行結果:返回了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:模擬執行超時

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

顯示結果

[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.初步認識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 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() 檢查是否結束,設置返回值
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 python3
import os
# 變量ret接收命令執行后的返回值
ret = os.system('ls -l /ltp |head -2')
print("\n執行成功" if ret == 0 else "\n執行失敗")

執行結果

[root@localhost python]# ./4.py
total 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實現subprocess執行外部命令
  • Python中使用subprocess庫創建附加進程
  • 解決python subprocess參數shell=True踩到的坑
  • python3通過subprocess模塊調用腳本并和腳本交互的操作
  • python subprocess pipe 實時輸出日志的操作
  • 通過實例解析python subprocess模塊原理及用法
  • 解決windows下python3使用multiprocessing.Pool出現的問題
  • Python多進程multiprocessing、進程池用法實例分析
  • 使用python執行shell腳本 并動態傳參 及subprocess的使用詳解
  • python process模塊的使用簡介

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

巨人網絡通訊聲明:本文標題《Python執行外部命令subprocess的使用詳解》,本文關鍵詞  Python,執行,外部,命令,subprocess,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Python執行外部命令subprocess的使用詳解》相關的同類信息!
  • 本頁收集關于Python執行外部命令subprocess的使用詳解的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    国产欧美日产一区| 91美女视频网站| 一区二区三区在线观看视频| 国产欧美精品一区aⅴ影院| 日韩欧美成人一区| 欧美成人综合网站| 欧美日韩极品在线观看一区| 欧美日韩高清在线播放| 欧美精品一二三四| 欧美一卡二卡三卡四卡| 91麻豆精品国产91久久久使用方法| 欧美日本免费一区二区三区| 久久疯狂做爰流白浆xx| 国产在线观看一区二区| 在线播放视频一区| 亚洲综合视频网| 成人免费视频视频在线观看免费 | 韩国精品久久久| 欧美日韩国产美| 亚洲欧美日本在线| 国产高清久久久久| 日韩久久免费av| 奇米精品一区二区三区在线观看 | 亚洲欧美日韩久久精品| 欧美videos大乳护士334| 国产亚洲精品aa| 欧美国产1区2区| 日本在线不卡视频| 欧美日韩高清影院| 亚洲图片欧美色图| 欧美午夜精品理论片a级按摩| 一区二区三区在线播放| 成av人片一区二区| 国产精品你懂的在线欣赏| 国产成人一区在线| 欧美国产欧美综合| 成人av免费在线播放| 国产精品视频线看| 国产盗摄一区二区| 国产欧美视频一区二区| 不卡免费追剧大全电视剧网站| 中文字幕精品在线不卡| 在线91免费看| 日韩久久久精品| 一区二区成人在线视频 | 欧美一区二区三区婷婷月色| 亚洲18色成人| 91精品国产aⅴ一区二区| 久久不见久久见中文字幕免费| 精品国产免费视频| 国产成人综合视频| 亚洲一二三级电影| 国产在线精品一区二区不卡了| 欧美亚洲丝袜传媒另类| 午夜天堂影视香蕉久久| 欧美亚洲免费在线一区| 蜜臂av日日欢夜夜爽一区| 亚洲精品在线观| 一本一道波多野结衣一区二区| 亚洲一区二区三区四区不卡| 日韩视频一区二区三区在线播放| 国产精选一区二区三区| 国产精品福利av| 欧美剧情片在线观看| 国产一区二区伦理| 亚洲你懂的在线视频| 亚洲手机成人高清视频| 国产精品亚洲视频| 久久久久久久一区| 韩国三级电影一区二区| 日韩久久久精品| 久久 天天综合| 精品国内二区三区| 精品一区二区久久久| 91麻豆精品91久久久久同性| 天堂久久一区二区三区| 欧美精品1区2区| 婷婷夜色潮精品综合在线| 91浏览器打开| 亚洲精品日韩一| 色综合久久中文综合久久97| 一区二区三区成人在线视频| 欧美影视一区在线| 五月天婷婷综合| 日韩一二三区视频| 国产精品理论在线观看| 色综合天天综合| 欧美色倩网站大全免费| 国产a久久麻豆| 色综合久久66| 亚洲一区二区三区中文字幕 | 日韩欧美国产一区在线观看| 精品中文字幕一区二区| 日本一区二区高清| 99r精品视频| 日韩在线一区二区三区| 久久亚洲春色中文字幕久久久| 国产91精品精华液一区二区三区| 亚洲精品视频在线观看免费| 在线成人免费视频| 懂色av中文字幕一区二区三区| 在线亚洲精品福利网址导航| 色综合久久久久综合99| 不卡的电视剧免费网站有什么| 亚洲视频香蕉人妖| 国产精品欧美综合在线| 久久影音资源网| 一区视频在线播放| 在线影院国内精品| 国产在线播精品第三| 亚洲综合激情另类小说区| 日韩一区二区精品葵司在线| 国产成人久久精品77777最新版本| 亚洲乱码精品一二三四区日韩在线 | 国产麻豆精品视频| 亚洲不卡av一区二区三区| 91麻豆精品国产自产在线| 黄一区二区三区| 亚洲精品国产无天堂网2021| 91精品免费在线| 97久久精品人人做人人爽| 亚洲国产精品自拍| 欧美大片国产精品| 色哟哟亚洲精品| 韩国精品主播一区二区在线观看| 亚洲国产你懂的| 国产亚洲一区字幕| 欧美日韩在线播放三区| 久久国产人妖系列| 亚洲夂夂婷婷色拍ww47| 国产人久久人人人人爽| 欧美日韩视频一区二区| 国产成人免费在线观看不卡| 亚洲va国产天堂va久久en| 国产欧美精品日韩区二区麻豆天美| www.爱久久.com| 日本网站在线观看一区二区三区 | 综合亚洲深深色噜噜狠狠网站| 97精品久久久久中文字幕| 日本人妖一区二区| 亚洲欧美日韩综合aⅴ视频| 精品国产乱码久久久久久牛牛| 色综合中文字幕| 成人高清免费在线播放| 国内成+人亚洲+欧美+综合在线| 亚洲一级二级三级在线免费观看| 中文成人av在线| 久久婷婷色综合| 欧美高清一级片在线| 色婷婷综合久久久久中文一区二区| 精品一区在线看| 亚洲自拍偷拍图区| 亚洲少妇屁股交4| 亚洲精品在线三区| 日本韩国精品一区二区在线观看| 国产福利精品一区| heyzo一本久久综合| 国产伦精品一区二区三区免费| 首页国产欧美日韩丝袜| 一区二区三区欧美日韩| 中文字幕中文在线不卡住| 亚洲三级小视频| 亚洲欧美一区二区不卡| 亚洲视频狠狠干| 亚洲欧美aⅴ...| 国产欧美久久久精品影院| 久久久久9999亚洲精品| 欧美激情一二三区| 欧美大片在线观看| 欧美videossexotv100| 欧美性猛片xxxx免费看久爱| 欧美综合在线视频| 在线视频你懂得一区二区三区| 欧美在线看片a免费观看| 欧美视频一区二区三区四区| 欧美日韩国产bt| 91一区二区三区在线观看| 色欧美片视频在线观看 | 95精品视频在线| 日本精品一级二级| 精品久久久久久无| 国产午夜亚洲精品理论片色戒 | 一区二区成人在线| 午夜精品123| 麻豆精品在线观看| 精品综合免费视频观看| 国产成人免费在线| 91农村精品一区二区在线| 欧美日韩一区久久| 欧美精选午夜久久久乱码6080| 国产亚洲短视频| 亚洲国产精品久久人人爱| 美女一区二区久久| 日本aⅴ亚洲精品中文乱码| gogogo免费视频观看亚洲一| 色狠狠av一区二区三区| 日韩视频免费观看高清完整版| 日韩美女一区二区三区四区| 午夜婷婷国产麻豆精品| 三级一区在线视频先锋 |