Python執(zhí)行系統(tǒng)命令的五種方式小結(jié)
在日常開發(fā)中,有時需要在Python腳本中執(zhí)行系統(tǒng)命令,Python有五種方式來執(zhí)行系統(tǒng)命令,推薦使用第五種。
python執(zhí)行系統(tǒng)命令的五種方式
方法1: os.system
這是最簡單的方法,適合簡單的業(yè)務(wù)場景,輸入為完整命令字符串,命令執(zhí)行結(jié)果輸出到控制臺;執(zhí)行成功,返回值為0,失敗返回值大于0。
import os result = os.system("ls -a")
方法2:os.popen
和上面一個類似,輸入完整的命令字符串,但是結(jié)果不會直接輸出,會保存到返回值中,調(diào)用read()可以讀取結(jié)果。
import os result = os.popen("ls -a") print(result.read())
方法3:subprocess.run
subprocess.run 是 Python 中 subprocess 模塊的一個函數(shù),用于運行子進程。它是 Python 3.5 版本引入的。subprocess.run 提供了一種簡單的方式來替代較老的 subprocess.call 函數(shù),更方便地運行子進程并等待其完成。執(zhí)行命令后,運行結(jié)果保存在CompletedProcess類實例中,并返回。更加靈活,可以將命令返回的結(jié)果輸出到指定的地方,比如輸出到控制臺、或者日志文件等。
import subprocess # 定義要運行的命令 command = ["ls", "-l"] # 使用 subprocess.run 運行命令, 如果不設(shè)置stdout參數(shù),會默認輸出到控制臺 result = subprocess.run(command, stdout=subprocess.PIPE, text=True) # 輸出命令的結(jié)果 print("Return code:", result.returncode) print("Output:\n", result.stdout)
這個例子中,我們定義了一個要運行的命令(列出當前目錄的文件和文件夾),然后使用 subprocess.run 來運行它。stdout=subprocess.PIPE 參數(shù)指定將子進程的標準輸出捕獲,而 text=True 參數(shù)確保輸出是文本形式。subprocess.run 的返回結(jié)果是一個 CompletedProcess 對象,包含了運行結(jié)果的一些信息,如返回碼、標準輸出等。請注意,subprocess.run 默認是同步執(zhí)行的,即會等待子進程執(zhí)行完成后再返回。如果你需要異步執(zhí)行或更高級的控制,可以考慮使用 asyncio 模塊或 subprocess.Popen 類。
stdout參數(shù)也可以設(shè)置為外部文件
同理,不設(shè)置stderr參數(shù)時,外部命令執(zhí)行失敗會直接拋出錯誤信息,將錯誤信息輸出在控制臺;一旦設(shè)置,則根據(jù)stderr參數(shù)進行重定向。
方法4:subprocess.call
subprocess.call 是 subprocess 模塊中的一個函數(shù),用于運行命令并等待其完成。它是相對較老的方法,而在較新版本的 Python 中,subprocess.run 被推薦用來替代 subprocess.call。這里不推薦使用也不做介紹了。
方法5:subprocess.Popen
subprocess.Popen 是 subprocess 模塊中的一個類,用于創(chuàng)建和管理子進程。與 subprocess.call 和 subprocess.run 不同,subprocess.Popen 提供了更靈活的控制,允許你與子進程的輸入、輸出進行交互,以及對進程的其他方面進行更詳細的配置。
下面是一個簡單的使用示例:
import subprocess # 定義要運行的命令 command = ["ls", "-l"] # 使用 subprocess.Popen 創(chuàng)建子進程 process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True) # 等待子進程完成,并獲取輸出和錯誤 stdout, stderr = process.communicate() # 輸出子進程的標準輸出和標準錯誤 print("Standard Output:\n", stdout) print("Standard Error:\n", stderr) # 獲取子進程的返回碼 return_code = process.returncode print("Return code:", return_code)
在這個例子中,我們使用 subprocess.Popen 創(chuàng)建了一個子進程,指定了要運行的命令以及捕獲標準輸出和標準錯誤。然后,使用 communicate 方法等待子進程完成,并獲取其輸出和錯誤。
subprocess.Popen 的構(gòu)造函數(shù)接受許多參數(shù),允許你自定義子進程的各個方面。例如,你可以指定工作目錄、環(huán)境變量、文件描述符、標準輸入等。更多詳細信息可以參考 Python 官方文檔:subprocess.Popen。
需要注意的是,與 subprocess.call 和 subprocess.run 不同,subprocess.Popen 不會等待子進程完成,你需要顯式調(diào)用 communicate 或其他等待方法來等待子進程完成。
總結(jié)
如果不知道用哪種就推薦使用subprocess.Popen,簡單場景下用os.system就可以了。
以上就是Python執(zhí)行系統(tǒng)命令的五種方式小結(jié)的詳細內(nèi)容,更多關(guān)于Python執(zhí)行系統(tǒng)命令的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
淺談keras中自定義二分類任務(wù)評價指標metrics的方法以及代碼
這篇文章主要介紹了淺談keras中自定義二分類任務(wù)評價指標metrics的方法以及代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06python爬取w3shcool的JQuery課程并且保存到本地
本文主要介紹python爬取w3shcool的JQuery的課程并且保存到本地的方法解析。具有很好的參考價值。下面跟著小編一起來看下吧2017-04-04Windows系統(tǒng)配置python腳本開機啟動的3種方法分享
這篇文章主要介紹了Windows系統(tǒng)配置python腳本開機啟動的3種方法分享,本文講解了開始菜單啟動項實現(xiàn)、開機腳本、通過一個服務(wù)調(diào)用該腳本三種方法,需要的朋友可以參考下2015-03-03