最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

簡介

subprocess是子流程,即進(jìn)程的意思,該模塊可以啟動(dòng)一個(gè)新進(jìn)程,并連接到它們的輸入/輸出/錯(cuò)誤管道,從而獲取返回值。

常用方法和接口

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

subprocess.Popen()解析

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

常用參數(shù):

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

bufsize:緩沖區(qū)大小。當(dāng)創(chuàng)建標(biāo)準(zhǔn)流的管道對象時(shí)使用,默認(rèn)-1。

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

1:表示行緩沖,僅當(dāng)universal_newlines=True時(shí)可用,也就是文本模式

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

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

stdin, stdout, stderr:分別表示程序的標(biāo)準(zhǔn)輸入、輸出、錯(cuò)誤句柄

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

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

cwd:用于設(shè)置子進(jìn)程的當(dāng)前目錄。

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

Popen 對象方法

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

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

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

subprocess.check_call()案例

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

import subprocess

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

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

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

subprocess.getstatusoutput()案例

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

import subprocess

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

# 返回:第一個(gè)元素0, 第二個(gè)為執(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:獲取視頻時(shí)長 - 實(shí)踐場景

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

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


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

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

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

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

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

運(yùn)行結(jié)果:

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

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

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

相關(guān)文章

  • 使用Python編寫一個(gè)模仿CPU工作的程序

    使用Python編寫一個(gè)模仿CPU工作的程序

    這篇文章主要介紹了使用Python編寫一個(gè)模仿CPU工作的程序,包括簡單的內(nèi)存和輸入輸出的實(shí)現(xiàn),本文中的例子需要一定的Python編程基礎(chǔ),是深入Python的實(shí)踐,需要的朋友可以參考下
    2015-04-04
  • python plotly繪制直方圖實(shí)例詳解

    python plotly繪制直方圖實(shí)例詳解

    這篇文章主要介紹了python plotly繪制直方圖實(shí)例詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • python爬蟲入門教程之糗百圖片爬蟲代碼分享

    python爬蟲入門教程之糗百圖片爬蟲代碼分享

    這篇文章主要介紹了python爬蟲入門教程之糗百圖片爬蟲代碼分享,本文以抓取糗事百科內(nèi)涵圖為需求寫了一個(gè)爬蟲,,需要的朋友可以參考下
    2014-09-09
  • Python使用selenium + headless chrome獲取網(wǎng)頁內(nèi)容的方法示例

    Python使用selenium + headless chrome獲取網(wǎng)頁內(nèi)容的方法示例

    這篇文章主要介紹了Python使用selenium + headless chrome獲取網(wǎng)頁內(nèi)容的方法示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • 怎樣用cmd命令行運(yùn)行Python文件

    怎樣用cmd命令行運(yùn)行Python文件

    這篇文章主要介紹了怎樣用cmd命令行運(yùn)行Python文件問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • Python+Turtle動(dòng)態(tài)繪制一棵樹實(shí)例分享

    Python+Turtle動(dòng)態(tài)繪制一棵樹實(shí)例分享

    這篇文章主要介紹了Python+Turtle動(dòng)態(tài)繪制一棵樹實(shí)例分享,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • Python多層嵌套list的遞歸處理方法(推薦)

    Python多層嵌套list的遞歸處理方法(推薦)

    下面小編就為大家?guī)硪黄狿ython多層嵌套list的遞歸處理方法(推薦)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-06-06
  • Python轉(zhuǎn)json時(shí)出現(xiàn)中文亂碼的問題及解決

    Python轉(zhuǎn)json時(shí)出現(xiàn)中文亂碼的問題及解決

    這篇文章主要介紹了Python轉(zhuǎn)json時(shí)出現(xiàn)中文亂碼的問題及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • 使用Python實(shí)現(xiàn)簡單的服務(wù)器功能

    使用Python實(shí)現(xiàn)簡單的服務(wù)器功能

    socket的使用并不局限于Python語言,你可以用C或者Java來寫出同樣的socket服務(wù)器,而所有語言使用socket的方式都類似(Apache就是使用C實(shí)現(xiàn)的服務(wù)器)
    2017-08-08
  • 詳解如何將python3.6軟件的py文件打包成exe程序

    詳解如何將python3.6軟件的py文件打包成exe程序

    這篇文章主要介紹了詳解如何將python3.6軟件的py文件打包成exe程序,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-10-10

最新評論

云南省| 长宁县| 邵阳市| 宁夏| 德州市| 大渡口区| 睢宁县| 庆阳市| 富民县| 万州区| 卢氏县| 大同县| 平塘县| 宁阳县| 桐庐县| 景东| 新安县| 东乌| 庄浪县| 府谷县| 盈江县| 当阳市| 波密县| 晋城| 新蔡县| 准格尔旗| 延寿县| 左云县| 诏安县| 济南市| 天峻县| 黑山县| 芜湖市| 长泰县| 双鸭山市| 宣恩县| 龙海市| 新河县| 盐城市| 叙永县| 原平市|