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對(duì)象,可以用于進(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è)文件對(duì)象,可以像普通文件一樣讀取。
with os.popen('ls -l') as stream:
print(stream.read())
特點(diǎn):
- 簡單易用,適用于只讀取輸出的場(chǎng)景。
- 不能捕獲錯(cuò)誤信息。
5. subprocess.check_output()
subprocess.check_output()用于執(zhí)行命令并獲取輸出。如果命令返回非零退出狀態(tài)碼,會(huì)拋出異常。
from subprocess import check_output
output = check_output(['ls', '-l'], text=True)
print("Output:", output)
特點(diǎn):
- 直接獲取命令輸出。
- 如果命令失敗,會(huì)拋出異常,便于錯(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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用python matplotlib 畫圖導(dǎo)入到word中如何保證分辨率
這篇文章主要介紹了使用python matplotlib 畫圖導(dǎo)入到word中如何保證分辨率的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-04-04
Python使用Flask結(jié)合DeepSeek開發(fā)(實(shí)現(xiàn)代碼)
文章介紹了如何使用ollama部署DeepSeek大模型,并通過Python Flask和SSE技術(shù)實(shí)現(xiàn)一個(gè)簡單的對(duì)話應(yīng)用,代碼實(shí)現(xiàn)了模型的調(diào)用和結(jié)果展示,并討論了SSE不支持POST請(qǐng)求的問題及解決方案,感興趣的朋友一起看看吧2025-02-02
Python 3.6 性能測(cè)試框架Locust安裝及使用方法(詳解)
下面小編就為大家?guī)硪黄狿ython 3.6 性能測(cè)試框架Locust安裝及使用方法(詳解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-10-10
使用Anaconda創(chuàng)建Pytorch虛擬環(huán)境的排坑詳細(xì)教程
PyTorch是一個(gè)開源的Python機(jī)器學(xué)習(xí)庫,基于Torch,用于自然語言處理等應(yīng)用程序,下面這篇文章主要給大家介紹了關(guān)于使用Anaconda創(chuàng)建Pytorch虛擬環(huán)境的相關(guān)資料,需要的朋友可以參考下2022-12-12

