欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

一文搞懂Python中subprocess模塊的使用

 更新時間:2022年11月18日 14:20:12   作者:三爺  
subprocess是子流程,即進程的意思,該模塊可以啟動一個新進程,并連接到它們的輸入/輸出/錯誤管道,從而獲取返回值。本文將和大家聊聊subprocess模塊的使用,需要的可以參考一下

簡介

subprocess是子流程,即進程的意思,該模塊可以啟動一個新進程,并連接到它們的輸入/輸出/錯誤管道,從而獲取返回值。

常用方法和接口

1、subprocess.run()

2、subprocess.call()

3、subprocess.check_call()

4、subprocess.getstatusoutput()

5、subprocess.getoutput()

6、subprocess.check_output()

7、subprocess.Popen()

subprocess.run()解析

常用參數(shù):

  • args:表示要執(zhí)行的命令。必須是一個字符串,字符串參數(shù)列表。
  • stdin、stdout 和 stderr:子進程的標準輸入、輸出和錯誤。其值可以是 subprocess.PIPE、subprocess.DEVNULL、一個已經(jīng)存在的文件描述符、已經(jīng)打開的文件對象或者 None。subprocess.PIPE 表示為子進程創(chuàng)建新的管道。subprocess.DEVNULL 表示使用 os.devnull。默認使用的是 None,表示什么都不做。另外,stderr 可以合并到 stdout 里一起輸出。
  • timeout:設(shè)置命令超時時間。如果命令執(zhí)行時間超時,子進程將被殺死,并彈出 TimeoutExpired 異常。
  • check:如果該參數(shù)設(shè)置為 True,并且進程退出狀態(tài)碼不是 0,則彈 出 CalledProcessError 異常。
  • encoding: 如果指定了該參數(shù),則 stdin、stdout 和 stderr 可以接收字符串數(shù)據(jù),并以該編碼方式編碼。否則只接收 bytes 類型的數(shù)據(jù)。
  • shell:如果該參數(shù)為 True,將通過操作系統(tǒng)的 shell 執(zhí)行指定的命令。

subprocess.Popen()解析

Popen 是 subprocess的核心,子進程的創(chuàng)建和管理

常用參數(shù):

args:shell命令,可以是字符串或者序列類型(如:list,元組)

bufsize:緩沖區(qū)大小。當創(chuàng)建標準流的管道對象時使用,默認-1。

0:不使用緩沖區(qū)

1:表示行緩沖,僅當universal_newlines=True時可用,也就是文本模式

正數(shù):表示緩沖區(qū)大小

負數(shù):表示使用系統(tǒng)默認的緩沖區(qū)大小。

stdin, stdout, stderr:分別表示程序的標準輸入、輸出、錯誤句柄

preexec_fn:只在 Unix 平臺下有效,用于指定一個可執(zhí)行對象(callable object),它將在子進程運行之前被調(diào)用

shell:如果該參數(shù)為 True,將通過操作系統(tǒng)的 shell 執(zhí)行指定的命令。

cwd:用于設(shè)置子進程的當前目錄。

env:用于指定子進程的環(huán)境變量。如果 env = None,子進程的環(huán)境變量將從父進程中繼承。

Popen 對象方法

  • poll(): 檢查進程是否終止,如果終止返回 returncode,否則返回 None。
  • wait(timeout): 等待子進程終止。
  • communicate(input,timeout): 和子進程交互,發(fā)送和讀取數(shù)據(jù)。
  • send_signal(singnal): 發(fā)送信號到子進程 。
  • terminate(): 停止子進程,也就是發(fā)送SIGTERM信號到子進程。
  • kill(): 殺死子進程。發(fā)送 SIGKILL 信號到子進程。

subprocess.run()案例

import subprocess

print(subprocess.run(["pip", "list"]))

subprocess.call()案例

執(zhí)行命令,返回命令的結(jié)果和執(zhí)行狀態(tài),0或者非0

import subprocess

result1 = subprocess.call(["pip", "list"])
print("*" * 30)
print(result1)  # 0

result2 = subprocess.call(["pip", "list1"])
print("*" * 30)
print(result2)  # -1

# 運行結(jié)果
# ******************************
# 0
# ERROR: unknown command "list1" - maybe you meant "list"
# ******************************
# 1

subprocess.check_call()案例

執(zhí)行命令,返回結(jié)果和狀態(tài),正常為0 ,執(zhí)行錯誤則拋出異常

import subprocess

result1 = subprocess.check_call(["pip", "list"])
print("*" * 30)
print(result1)

result2 = subprocess.check_call(["pip", "list2"])
print("*" * 30)
print(result2)

# 運行結(jié)果,運行錯誤,拋出異常。
# ******************************
# 0
#    raise CalledProcessError(retcode, cmd)
# subprocess.CalledProcessError: Command '['pip', 'list2']' returned non-zero exit status 1.

subprocess.getstatusoutput()案例

接受字符串形式的命令,返回 一個元組形式的結(jié)果,第一個元素是命令執(zhí)行狀態(tài),第二個為執(zhí)行結(jié)果。

import subprocess

result1 = subprocess.getstatusoutput("pip --version")
print(result1)

# 返回:第一個元素0, 第二個為執(zhí)行結(jié)果
# (0, 'pip 21.1.3 from C:\\lib\\site-packages\\pip (python 3.9)\n')


result2 = subprocess.getstatusoutput("pip -vesi")
print(result2)

# 執(zhí)行失敗的案例
# (2, '\nUsage:   \n  pip <command> [options]\n\nno such option: -e')

subprocess.getoutput()案例

接受字符串形式的命令,放回執(zhí)行結(jié)果

import subprocess

result1 = subprocess.getoutput("pip --version")
print(result1)
# 返回
# pip 21.1.3 from D:\\lib\site-packages\pip (python 3.9)


result2 = subprocess.getoutput("pip -vesi")
print(result2)
# 返回
# Usage:   
#   pip <command> [options]
# 
# no such option: -e

subprocess.check_output()案例

執(zhí)行命令,返回執(zhí)行的結(jié)果,而不是打印

import subprocess

result1 = subprocess.check_output("pip --version")
print(result1)
# 返回
# b'pip 21.1.3 from D:\\lib\\site-packages\\pip (python 3.9)\r\r\n'


result2 = subprocess.check_output("pip -vesi")
print(result2)
# 返回
#     raise CalledProcessError(retcode, process.args,
# subprocess.CalledProcessError: Command 'pip -vesi' returned non-zero exit status 2.

subprocess.Popen()綜合案例

案例中視頻長度代碼,請參考 - Python:獲取視頻時長 - 實踐場景

# coding:utf-8
import time
import datetime
import subprocess
from analysis_video import video_duration

file = r"C:\Users\videos\duck.mp4"  # 請根據(jù)實際情況填寫視頻路徑
video_time = video_duration(file)
print(video_time)
video_pid = subprocess.Popen(f'C:\Program Files\Windows Media Player\wmplayer.exe {file}')


# poll(): 檢查進程是否終止,如果終止返回 returncode,否則返回 None。
print(f"now:{datetime.datetime.now()}. - 當前返回狀態(tài):{video_pid.poll()}")
# now:2021-11-28 11:20:48.504796. - 當前返回狀態(tài):None

# 獲取當前執(zhí)行子shell的程序的進程號
print("當前執(zhí)行進程號為:{}".format(video_pid.pid))

sleeps = int(video_time) + 2
print(f"根據(jù)視頻時長等待:{sleeps}秒")
time.sleep(sleeps)

# kill(): 殺死子進程。發(fā)送 SIGKILL 信號到子進程。
video_pid.kill()
time.sleep(1)
print(f"now:{datetime.datetime.now()}. - 當前返回狀態(tài):{video_pid.poll()}")
# now:2021-11-28 11:21:05.520822. - 當前返回狀態(tài):1

# wait()
# 等待命令執(zhí)行完成,并且返回結(jié)果狀態(tài)
print(video_pid.wait())  # 1

運行結(jié)果:

附,各種信號總結(jié)

SIGHUP     終止進程     終端線路掛斷
SIGINT     終止進程     中斷進程
SIGQUIT   建立CORE文件終止進程,并且生成core文件
SIGILL   建立CORE文件       非法指令
SIGTRAP   建立CORE文件       跟蹤自陷
SIGBUS   建立CORE文件       總線錯誤
SIGSEGV   建立CORE文件       段非法錯誤
SIGFPE   建立CORE文件       浮點異常
SIGIOT   建立CORE文件       執(zhí)行I/O自陷
SIGKILL   終止進程     殺死進程
SIGPIPE   終止進程     向一個沒有讀進程的管道寫數(shù)據(jù)
SIGALARM   終止進程     計時器到時
SIGTERM   終止進程     軟件終止信號
SIGSTOP   停止進程     非終端來的停止信號
SIGTSTP   停止進程     終端來的停止信號
SIGCONT   忽略信號     繼續(xù)執(zhí)行一個停止的進程
SIGURG   忽略信號     I/O緊急信號
SIGIO     忽略信號     描述符上可以進行I/O
SIGCHLD   忽略信號     當子進程停止或退出時通知父進程
SIGTTOU   停止進程     后臺進程寫終端
SIGTTIN   停止進程     后臺進程讀終端
SIGXGPU   終止進程     CPU時限超時
SIGXFSZ   終止進程     文件長度過長
SIGWINCH   忽略信號     窗口大小發(fā)生變化
SIGPROF   終止進程     統(tǒng)計分布圖用計時器到時
SIGUSR1   終止進程     用戶定義信號1
SIGUSR2   終止進程     用戶定義信號2
SIGVTALRM 終止進程     虛擬計時器到時

以上就是一文搞懂Python中subprocess模塊的使用的詳細內(nèi)容,更多關(guān)于Python subprocess模塊的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python實現(xiàn)字符串匹配的KMP算法

    Python實現(xiàn)字符串匹配的KMP算法

    KMP算法的關(guān)鍵是利用匹配失敗后的信息,盡量減少模式串與主串的匹配次數(shù)以達到快速匹配的目的。這篇文章主要介紹了Python實現(xiàn)字符串匹配的KMP算法,需要的朋友可以參考下
    2019-04-04
  • Python?pandas?DataFrame基礎(chǔ)運算及空值填充詳解

    Python?pandas?DataFrame基礎(chǔ)運算及空值填充詳解

    pandas除了可以drop含有空值的數(shù)據(jù)之外,當然也可以用來填充空值,下面這篇文章主要給大家介紹了關(guān)于Python?pandas?DataFrame基礎(chǔ)運算及空值填充的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-07-07
  • 用Python實現(xiàn)局域網(wǎng)控制電腦

    用Python實現(xiàn)局域網(wǎng)控制電腦

    大家好,本篇文章主要講的是用Python實現(xiàn)局域網(wǎng)控制電腦,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • 使用TensorFlow-Slim進行圖像分類的實現(xiàn)

    使用TensorFlow-Slim進行圖像分類的實現(xiàn)

    這篇文章主要介紹了使用TensorFlow-Slim進行圖像分類的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-12-12
  • Python基于PycURL實現(xiàn)POST的方法

    Python基于PycURL實現(xiàn)POST的方法

    這篇文章主要介紹了Python基于PycURL實現(xiàn)POST的方法,涉及Python實現(xiàn)curl傳遞post數(shù)據(jù)的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • Windows下實現(xiàn)Python2和Python3兩個版共存的方法

    Windows下實現(xiàn)Python2和Python3兩個版共存的方法

    這篇文章主要介紹了Windows下實現(xiàn)Python2和Python3兩個版共存的方法,本文詳細的給出了操作步驟和設(shè)置完成后的使用方法,需要的朋友可以參考下
    2015-06-06
  • Django 緩存配置Redis使用詳解

    Django 緩存配置Redis使用詳解

    這篇文章主要介紹了Django 緩存配置Redis使用詳解,緩存是將一些常用的數(shù)據(jù)保存內(nèi)存或者memcache中,在一定的時間內(nèi)有用戶來訪問這些數(shù)據(jù)時,則不再去執(zhí)行數(shù)據(jù)庫及渲染等操作,而是直接從內(nèi)存或memcache的緩存中去取得數(shù)據(jù),然后返回給用戶
    2019-07-07
  • python PIL和CV對 圖片的讀取,顯示,裁剪,保存實現(xiàn)方法

    python PIL和CV對 圖片的讀取,顯示,裁剪,保存實現(xiàn)方法

    今天小編就為大家分享一篇python PIL和CV對 圖片的讀取,顯示,裁剪,保存實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • python實現(xiàn)停車場管理系統(tǒng)

    python實現(xiàn)停車場管理系統(tǒng)

    這篇文章主要為大家詳細介紹了python實現(xiàn)停車場管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • 基于Python實現(xiàn)圖像文字識別OCR工具

    基于Python實現(xiàn)圖像文字識別OCR工具

    在工作、生活中常常會用到,比如票據(jù)、漫畫、掃描件、照片的文本提取。本文主要介紹了基于PyQt + PaddleOCR實現(xiàn)的一個桌面端的OCR工具,用于快速實現(xiàn)圖片中文本區(qū)域自動檢測+文本自動識別,需要的朋友可以參考一下
    2021-12-12

最新評論