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