python?subprocess.run中的具體使用
一、詳解
subprocess.run 是 Python 3.5 及以上版本中引入的一個(gè)函數(shù),用于運(yùn)行子進(jìn)程。它是 subprocess 模塊的一部分,提供了一種更簡單和更強(qiáng)大的方式來創(chuàng)建和管理子進(jìn)程。subprocess.run 函數(shù)可以替代舊的 os.system 和 subprocess.call 等函數(shù)。
以下是 subprocess.run 函數(shù)的詳細(xì)解釋:
1.1、基本用法
import subprocess result = subprocess.run(['ls', '-l'])
在這個(gè)例子中,subprocess.run 執(zhí)行了 ls -l 命令,并等待命令完成。
1.2、參數(shù)詳解
- args: 要執(zhí)行的命令及其參數(shù)。可以是一個(gè)字符串或一個(gè)字符串列表。
- stdin, stdout, stderr: 分別表示標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤??梢允?subprocess.PIPE、文件對(duì)象或文件描述符。
- input: 傳遞給子進(jìn)程的輸入數(shù)據(jù)。
- timeout: 子進(jìn)程的超時(shí)時(shí)間(以秒為單位)。如果子進(jìn)程在指定時(shí)間內(nèi)沒有完成,將拋出 subprocess.TimeoutExpired 異常。
- check: 如果設(shè)置為 True,并且子進(jìn)程返回一個(gè)非零退出狀態(tài)碼,將拋出 subprocess.CalledProcessError 異常。
- encoding: 如果指定了 encoding,則 stdin, stdout, stderr 將被解碼為字符串。
- errors: 用于指定如何處理解碼錯(cuò)誤。
- shell: 如果設(shè)置為 True,將通過 shell 執(zhí)行命令。
- cwd: 設(shè)置子進(jìn)程的當(dāng)前工作目錄。
- env: 用于指定子進(jìn)程的環(huán)境變量。
1.3、返回值
subprocess.run 返回一個(gè) CompletedProcess 對(duì)象,包含以下屬性:
- args: 執(zhí)行的命令及其參數(shù)。
- returncode: 子進(jìn)程的退出狀態(tài)碼。
- stdout: 子進(jìn)程的標(biāo)準(zhǔn)輸出(如果 stdout 參數(shù)設(shè)置為 subprocess.PIPE)。
- stderr: 子進(jìn)程的標(biāo)準(zhǔn)錯(cuò)誤(如果 stderr 參數(shù)設(shè)置為 subprocess.PIPE)。
1.4、示例
捕獲輸出
result = subprocess.run(['ls', '-l'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True) print(result.stdout)
處理錯(cuò)誤
try:
result = subprocess.run(['ls', '-l', '/nonexistent'], check=True)
except subprocess.CalledProcessError as e:
print(f"Error: {e}")使用超時(shí)
try:
result = subprocess.run(['sleep', '10'], timeout=5)
except subprocess.TimeoutExpired as e:
print(f"Timeout: {e}")通過 shell 執(zhí)行命令
result = subprocess.run('echo $HOME', shell=True, text=True)
print(result.stdout)1.5、總結(jié)
subprocess.run 提供了一種靈活且強(qiáng)大的方式來執(zhí)行子進(jìn)程,并且可以通過各種參數(shù)來控制子進(jìn)程的行為和處理其輸出。通過合理使用這些參數(shù),可以滿足大多數(shù)子進(jìn)程管理的需求。
二、subprocess.run執(zhí)行python文件
在 Python 中,你可以使用 subprocess.run 來執(zhí)行另一個(gè) Python 文件。subprocess.run 是 Python 3.5 及以上版本中推薦的用于運(yùn)行子進(jìn)程的函數(shù)。下面是一個(gè)示例,展示了如何使用 subprocess.run 來執(zhí)行另一個(gè) Python 文件:
假設(shè)你有一個(gè)名為 script_to_run.py 的 Python 文件,你想從另一個(gè) Python 腳本中運(yùn)行它。
1、創(chuàng)建一個(gè)名為 script_to_run.py 的文件,并在其中編寫一些代碼,例如:
# script_to_run.py
print("Hello from script_to_run.py!")2、創(chuàng)建另一個(gè) Python 文件,例如 main_script.py,并在其中使用 subprocess.run 來執(zhí)行 script_to_run.py:
# main_script.py
import subprocess
# 使用 Python 解釋器執(zhí)行 script_to_run.py
result = subprocess.run(['python', 'script_to_run.py'], capture_output=True, text=True)
# 打印子進(jìn)程的輸出
print("Output of script_to_run.py:")
print(result.stdout)
# 打印子進(jìn)程的錯(cuò)誤輸出(如果有)
if result.stderr:
print("Errors:")
print(result.stderr)在這個(gè)示例中,subprocess.run 函數(shù)的參數(shù)解釋如下:
- ['python', 'script_to_run.py']:這是一個(gè)列表,包含要執(zhí)行的命令和參數(shù)。在這里,我們使用 python 解釋器來運(yùn)行 script_to_run.py 文件。
- capture_output=True:這個(gè)參數(shù)告訴 subprocess.run 捕獲子進(jìn)程的標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤。
- text=True:這個(gè)參數(shù)告訴 subprocess.run 將輸出和錯(cuò)誤作為字符串而不是字節(jié)返回。
運(yùn)行 main_script.py,你應(yīng)該會(huì)看到以下輸出:
Output of script_to_run.py: Hello from script_to_run.py!
如果 script_to_run.py 中有任何錯(cuò)誤輸出,它們也會(huì)被捕獲并打印出來。
請(qǐng)注意,如果你使用的是 Python 3.6 或更高版本,你可以使用 subprocess.run 的 check=True 參數(shù)來自動(dòng)檢查子進(jìn)程的返回碼,并在子進(jìn)程返回非零狀態(tài)碼時(shí)引發(fā) subprocess.CalledProcessError 異常:
# main_script.py
import subprocess
try:
result = subprocess.run(['python', 'script_to_run.py'], capture_output=True, text=True, check=True)
print("Output of script_to_run.py:")
print(result.stdout)
except subprocess.CalledProcessError as e:
print("Errors:")
print(e.stderr)這樣可以更方便地處理子進(jìn)程執(zhí)行失敗的情況。
到此這篇關(guān)于python subprocess.run中的具體使用的文章就介紹到這了,更多相關(guān)python subprocess.run內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
對(duì)Pytorch 中的contiguous理解說明
這篇文章主要介紹了對(duì)Pytorch 中的contiguous理解說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-03-03
Python的爬蟲框架scrapy用21行代碼寫一個(gè)爬蟲
最近在學(xué)習(xí)Python的爬蟲框架scrapy,通過爬取線報(bào)網(wǎng)站后發(fā)現(xiàn)整個(gè)過程還是挺值得學(xué)習(xí)的,所以下面這篇文章主要就給大家介紹了Python的爬蟲框架scrapy利用21行代碼寫一個(gè)爬蟲的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧。2017-04-04
使用Python和OpenCV實(shí)現(xiàn)動(dòng)態(tài)背景的畫中畫效果
這篇文章將通過一個(gè)詳細(xì)的Python腳本,使用OpenCV庫來為視頻添加動(dòng)態(tài)背景,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-11-11
python條件變量之生產(chǎn)者與消費(fèi)者操作實(shí)例分析
這篇文章主要介紹了python條件變量之生產(chǎn)者與消費(fèi)者操作,結(jié)合具體實(shí)例形式分析了Python條件變量的概念、原理、及線程操作的相關(guān)技巧,需要的朋友可以參考下2017-03-03
Python實(shí)現(xiàn)telnet服務(wù)器的方法
這篇文章主要介紹了Python實(shí)現(xiàn)telnet服務(wù)器的方法,涉及Python通過Telnet連接服務(wù)器的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07
在Python Flask App中獲取已發(fā)布的JSON對(duì)象的解決方案
這篇文章主要介紹了在Python Flask App中獲取已發(fā)布的JSON對(duì)象的解決方案,文中通過代碼示例介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-08-08
對(duì)django 2.x版本中models.ForeignKey()外鍵說明介紹
這篇文章主要介紹了對(duì)django 2.x版本中models.ForeignKey()外鍵說明介紹,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-03-03
python實(shí)現(xiàn)簡單中文詞頻統(tǒng)計(jì)示例
本篇文章主要介紹了python實(shí)現(xiàn)簡單中文詞頻統(tǒng)計(jì)示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-11-11

