亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

python學(xué)習(xí)之subprocess模塊詳解

 更新時間:2024年12月07日 09:49:42   作者:aiyouweihei_001  
這篇文章主要介紹了python學(xué)習(xí)之subprocess模塊的相關(guān)資料,該模塊用于創(chuàng)建子進(jìn)程并與其進(jìn)行交互,它提供了多個函數(shù)和類來執(zhí)行操作系統(tǒng)命令、獲取命令輸出以及管理子進(jìn)程的生命周期,需要的朋友可以參考下

subprocess功能:創(chuàng)建子進(jìn)程,并連接他的輸入、輸出和錯誤管道,獲取其返回狀態(tài)(可以在python代碼中執(zhí)行操作系統(tǒng)級別的命令)

1. subprocess.run()

功能:執(zhí)行args參數(shù)所表示的命令,等待命令結(jié)束,并返回一個CompletedProcess類型對象

1.1. 參數(shù)介紹

subprocess.run(args,*,stdin=None,input=None,stdout=None,stderr=None,shell=False,timeout=None,check=False,encoding=None,errors=None)

  • args:表示要執(zhí)行的命令,必須是字符串或字符串參數(shù)列表
  • Stdin, stdout, stderr:子進(jìn)程的標(biāo)準(zhǔn)輸入、輸出和錯誤,其值可以是subprocess.PIPE, subporcess.DEVNULL, 一個已經(jīng)存在的文件描述符、已經(jīng)打開的文件對象或者None
  • timeout:設(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í)行指定命令

1.1.1 subprocess.CompletedProcess

run()的返回值,表示一個進(jìn)程結(jié)束了。CompletedProcess類有下面這些屬性

  • args:啟動進(jìn)程的參數(shù),通常是一個列表或字符串
  • returncode:進(jìn)程結(jié)束狀態(tài)返回碼,0表示成功狀態(tài)
  • stdout:獲取子進(jìn)程的stdout,通常為bytes類型序列,None表示沒有捕獲值。
  • stderr:獲取子進(jìn)程的錯誤信息,通常為bytes類型序列,None表示沒有捕獲值
  • check_returncode():檢查返回碼,若返回狀態(tài)碼不為0,彈出calledProcessError異常

1.1.2 subprocess.DEVNULL

特殊值,用于傳遞給stdout, stdin和stderr參數(shù)

1.1.3 subprocess.PIPE

管道,可傳遞給stdout, stdin, stderr參數(shù)

1.1.4 subprocess.STDOUT

特殊值,可傳遞給stderr參數(shù),表示stdout和stderr合并輸出,可以使用read(), readline(), readlines()等方法

1.1.5 args與shell

  • args參數(shù)可以接收一個字符串,也可以傳遞字符串分割列表
  • shell參數(shù)默認(rèn)為False,設(shè)置為True的時候表示使用操作系統(tǒng)的shell執(zhí)行命令,當(dāng)args為字符串時,必須指定shell=True;當(dāng)args是個列表的時候,shell保持默認(rèn)的False

1.2. 獲取執(zhí)行結(jié)果

run()方法返回的是一個completedProcess類型對象,而非執(zhí)行結(jié)果。如果要獲取命令執(zhí)行的結(jié)果或信息,在調(diào)用run()方法的時候,需要指定stdout=sunprocess.PIPE,結(jié)果將會以bytes類型保存在stdout屬性中

1.2.1. 交互式輸入

run()方法的stdin參數(shù)可以接收一個文件句柄,如下

import subprocess
file=open("d:\\1.txt")
ret=subprocess.run('python',stdin=file,stdout=subprocess.PIPE,shell=True)
print(ret.stdout)

2. subprocess.Popen()

其用法和參數(shù)與run()基本類同,可創(chuàng)建和管理子進(jìn)程,但是它的返回值是一個Popen對象,而不是CompletedProcess對象

2.1 參數(shù)介紹

class subprocess.Popen(args, bufsize=-1, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=True, shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0,restore_signals=True, start_new_session=False, pass_fds=(), *, encoding=None, errors=None)
  • args:shell命令,可以是字符串或者字符序列
  • bufsize:緩沖區(qū)大小,默認(rèn)-1,用于創(chuàng)建標(biāo)準(zhǔn)流的管道對象
    • 0:不使用緩沖區(qū)
    • 1:表示行緩沖,僅當(dāng)universal_newlines=True時可用,即文本模式
    • 正數(shù):表示緩沖區(qū)大小
    • 負(fù)數(shù):表示使用系統(tǒng)默認(rèn)的緩沖區(qū)大小。
  • stdin, stdout, stderr:分別表示程序的標(biāo)準(zhǔn)輸入、輸出、錯誤句柄
  • preexec_fn:只在 Unix 平臺下有效,用于指定一個可執(zhí)行對象(callable object),它將在子進(jì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)程中繼承。

2.1.1 subprocess.Popen可調(diào)用的方法

  • poll():檢查進(jìn)程是否終止
  • wait():等待子進(jìn)程終止
  • communicate(input, timeout):和子進(jìn)程交互,發(fā)送和讀取數(shù)據(jù)
    • input的數(shù)據(jù)類型必須是字節(jié)串,若universal_newlines=True,則input參數(shù)的數(shù)據(jù)類型必須是字符串
    • 該方法返回一個元組(stdout_data, stderr_data),字節(jié)串或字符串
    • timeout指定的秒數(shù)后該進(jìn)程還沒結(jié)束,將會拋出TimeoutExpired異常
  • send_signal(signal):發(fā)送信號到子進(jìn)程
  • terminate():停止子進(jìn)程,即發(fā)送SIGTERM信號到子進(jìn)程
  • kill():殺死子進(jìn)程,發(fā)送SIGKILL

2.2 實例

Popen對象的stdin, stdout, stderr是三個文件句柄,可以像文件那樣讀寫,通過subprocess.stdin.write()可以輸入數(shù)據(jù),subprocess.Popen().stdout.read()可以輸出數(shù)據(jù)

import subprocess
s=subprocess.Popen('python3',stdout=subprocess.PIPE,stdin=subprocess.PIPE,shell=True)
s.stdin.write(b'import os\n')
s.stdin.write(b'print(os.environ)')
s.stdin.close()

3. subprocess常用函數(shù)

函數(shù)使用說明
subprocess.run()執(zhí)行args參數(shù)所表示的命令,執(zhí)行完成后返回CompletedProcess
subprocess.call()執(zhí)行指定的命令,返回命令執(zhí)行狀態(tài),類似os.system(cmd)
subprocess.check_call()等價于subprocess.run(…,check=True)
subprocess.check_output()執(zhí)行指定命令,狀態(tài)碼為0則返回命令執(zhí)行結(jié)果,否則拋出異常
subprocess.getoutput()接收字符串格式的命令,執(zhí)行并返回結(jié)果,類似于os.popen(cmd).read()和commands.getoutput(cmd)
subprocess.getstatusoutput()執(zhí)行cmd命令,返回元組(命令執(zhí)行狀態(tài),命令執(zhí)行結(jié)果輸出)

附:python subprocess.run() 執(zhí)行py腳本并等待該腳本執(zhí)行完成

要使用 subprocess.run() 執(zhí)行 Python 腳本并等待腳本執(zhí)行完成,可以按照以下方式進(jìn)行:

import subprocess

# 腳本的文件路徑
script_path = "/path/to/your/script.py"

# 使用 subprocess.run() 執(zhí)行腳本
subprocess.run(["python", script_path], capture_output=True, text=True)

# 程序會在這里等待腳本執(zhí)行完成

在上述代碼中:

  • "python" 是要執(zhí)行的命令。
  • [script_path] 是命令的參數(shù),即你要執(zhí)行的Python腳本的路徑。
  • capture_output=True 參數(shù)表示捕獲子進(jìn)程的標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯誤流。返回的結(jié)果將會是一個 CompletedProcess 對象,其 stdout 和 stderr 屬性分別包含標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯誤的內(nèi)容。
  • text=True 參數(shù)表示將捕獲的輸出以文本形式返回(在Python 3.7及以上版本有效)。

subprocess.run() 會阻塞當(dāng)前進(jìn)程,直到被調(diào)用的命令執(zhí)行完成。執(zhí)行完成后,程序才會繼續(xù)執(zhí)行后續(xù)的代碼。如果你不想捕獲輸出,可以去掉 capture_output 參數(shù)。

總結(jié) 

到此這篇關(guān)于python學(xué)習(xí)之subprocess模塊詳解的文章就介紹到這了,更多相關(guān)python之subprocess模塊內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python中的引用知識點總結(jié)

    Python中的引用知識點總結(jié)

    在本文里我們給大家整理了關(guān)于Python中的引用知識點以及相關(guān)代碼總結(jié),需要的朋友們跟著學(xué)習(xí)下。
    2019-05-05
  • opencv python簡易文檔之圖片基本操作指南

    opencv python簡易文檔之圖片基本操作指南

    OpenCv除了可以獲取圖像之外,還可以對圖像進(jìn)行一下處理操作,下面這篇文章主要給大家介紹了關(guān)于opencv python簡易文檔之圖片基本操作的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • OpenCV特征提取與檢測之Shi-Tomasi角點檢測器

    OpenCV特征提取與檢測之Shi-Tomasi角點檢測器

    在角點檢測的世界里哈瑞斯無疑是最重要的方法之一,但Shi-Tomasi作為改進(jìn)的算法也有很大應(yīng)用場景,尤其是動態(tài)跟蹤用的還比較多,這篇文章主要給大家介紹了關(guān)于OpenCV特征提取與檢測之Shi-Tomasi角點檢測器的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • Python實現(xiàn)windows自動關(guān)機功能

    Python實現(xiàn)windows自動關(guān)機功能

    這篇文章主要為大家詳細(xì)介紹了如何使用Python實現(xiàn)windows自動關(guān)機功能,文中的示例代碼講解詳細(xì),具有一定的借鑒價值,有需要的小伙伴可以參考一下
    2025-01-01
  • Python利用openpyxl庫遍歷Sheet的實例

    Python利用openpyxl庫遍歷Sheet的實例

    今天小編就為大家?guī)硪黄狿ython利用openpyxl庫遍歷Sheet的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • 基于pycharm 項目和項目文件命名規(guī)則的介紹

    基于pycharm 項目和項目文件命名規(guī)則的介紹

    這篇文章主要介紹了基于pycharm 項目和項目文件命名規(guī)則的介紹,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • python PIL Image 圖像處理基本操作實例

    python PIL Image 圖像處理基本操作實例

    這篇文章主要介紹了python PIL Image 圖像處理基本操作實例包括圖片加載、灰度圖,圖像通道分離和合并,在圖像上輸出文字,圖像縮放,圖像閾值分割、 二值化,圖像裁剪需要的朋友可以參考下
    2022-04-04
  • python實現(xiàn)簡單加密解密機制

    python實現(xiàn)簡單加密解密機制

    這篇文章主要為大家詳細(xì)介紹了python實現(xiàn)簡單加密解密機制,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • pytorch實現(xiàn)特殊的Module--Sqeuential三種寫法

    pytorch實現(xiàn)特殊的Module--Sqeuential三種寫法

    今天小編就為大家分享一篇pytorch實現(xiàn)特殊的Module--Sqeuential三種寫法。具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • RuntimeError:CUDA?out?of?memory多種場景下的解決方案

    RuntimeError:CUDA?out?of?memory多種場景下的解決方案

    若遇到RuntimeError:?CUDA?out?of?memory錯誤,通常意味著GPU內(nèi)存不足以處理當(dāng)前的計算需求,本文就來介紹一下多種場景下的解決方案,具有一定的參考價值,感興趣的可以了解一下
    2024-02-02

最新評論