Python執(zhí)行Shell命令的六種方法
1. os.system()
os.system()
是執(zhí)行 shell 命令的最簡單方法。它接受一個(gè)字符串作為命令,并在 shell 中執(zhí)行。返回值是命令的退出狀態(tài)碼,通常 0 表示成功,非 0 表示失敗。
import os result = os.system('ls -l') print("Exit status:", result)
特點(diǎn):
- 簡單易用。
- 無法獲取命令的輸出或錯(cuò)誤信息。
- 無法處理命令的超時(shí)。
2. subprocess.run()
subprocess.run()
是推薦的方式,因?yàn)樗峁┝烁嗟撵`活性和功能。它可以執(zhí)行命令,并且可以捕獲輸出和錯(cuò)誤信息。
import subprocess result = subprocess.run(['ls', '-l'], capture_output=True, text=True) print("Output:", result.stdout)
特點(diǎn):
- 可以捕獲輸出和錯(cuò)誤。
- 可以設(shè)置超時(shí)。
- 可以檢查命令的退出狀態(tài)。
3. subprocess.Popen()
subprocess.Popen()
提供了更細(xì)粒度的控制,允許執(zhí)行命令并與之交互。它返回一個(gè)Popen
對象,可以用于進(jìn)一步操作。
import subprocess process = subprocess.Popen(['ls', '-l'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True) stdout, stderr = process.communicate() print("Output:", stdout) if process.returncode != 0: print("Error:", stderr)
特點(diǎn):
- 可以實(shí)時(shí)獲取輸出和錯(cuò)誤。
- 可以控制進(jìn)程的輸入、輸出和錯(cuò)誤流。
- 可以等待或輪詢進(jìn)程的完成。
4. os.popen()
os.popen()
用于執(zhí)行命令并讀取輸出。它返回一個(gè)文件對象,可以像普通文件一樣讀取。
with os.popen('ls -l') as stream: print(stream.read())
特點(diǎn):
- 簡單易用,適用于只讀取輸出的場景。
- 不能捕獲錯(cuò)誤信息。
5. subprocess.check_output()
subprocess.check_output()
用于執(zhí)行命令并獲取輸出。如果命令返回非零退出狀態(tài)碼,會拋出異常。
from subprocess import check_output output = check_output(['ls', '-l'], text=True) print("Output:", output)
特點(diǎn):
- 直接獲取命令輸出。
- 如果命令失敗,會拋出異常,便于錯(cuò)誤處理。
6. subprocess.call()
subprocess.call()
執(zhí)行一個(gè)命令并等待其完成,返回命令的退出狀態(tài)碼。
import subprocess status = subprocess.call(['ls', '-l']) print("Exit status:", status)
特點(diǎn):
- 簡單易用,只返回退出狀態(tài)碼。
- 不能捕獲輸出或錯(cuò)誤信息。
使用建議
在選擇執(zhí)行 shell 命令的方法時(shí),應(yīng)根據(jù)具體需求來決定使用哪種方法。如果需要捕獲輸出和錯(cuò)誤信息,推薦使用subprocess.run()或subprocess.Popen()。如果只是簡單地執(zhí)行命令并獲取退出狀態(tài),os.system()或subprocess.call()可能更合適。
此外,使用這些方法時(shí),還需要注意異常和錯(cuò)誤的處理,特別是當(dāng)命令失敗時(shí)。subprocess模塊因其強(qiáng)大的控制和靈活性,已成為執(zhí)行 shell 命令的首選方式。
到此這篇關(guān)于Python執(zhí)行Shell命令的六種方法的文章就介紹到這了,更多相關(guān)Python執(zhí)行Shell命令內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
手把手教你實(shí)現(xiàn)Python連接數(shù)據(jù)庫并快速取數(shù)的工具
在數(shù)據(jù)生產(chǎn)應(yīng)用部門,取數(shù)分析是一個(gè)很常見的需求,實(shí)際上業(yè)務(wù)人員需求時(shí)刻變化,最高效的方式是讓業(yè)務(wù)部門自己來取。本文就來手把手教大家搭建一個(gè)?Python?連接數(shù)據(jù)庫,快速取數(shù)工具,需要的可以參考一下2022-11-11Python實(shí)現(xiàn)關(guān)鍵路徑和七格圖計(jì)算詳解
這篇文章主要為大家詳細(xì)介紹了如何利用Python實(shí)現(xiàn)關(guān)鍵路徑和七格圖計(jì)算,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下2023-03-03Jupyter安裝鏈接aconda實(shí)現(xiàn)過程圖解
這篇文章主要介紹了Jupyter安裝鏈接aconda實(shí)現(xiàn)過程圖解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11在Python3 numpy中mean和average的區(qū)別詳解
今天小編就為大家分享一篇在Python3 numpy中mean和average的區(qū)別詳解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-08-08基于Python爬取fofa網(wǎng)頁端數(shù)據(jù)過程解析
這篇文章主要介紹了基于Python爬取fofa網(wǎng)頁端數(shù)據(jù)過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07python實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)(面向?qū)ο?
這篇文章主要介紹了python實(shí)現(xiàn)面向?qū)ο蟀鎸W(xué)生信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-06-06