Python執行Shell命令
- 1、背景概述
- 2、Python集成Shell及數據交互
1、背景概述
Python作為一種強大的腳本語言,其易用性和靈活性使得它成為自動化任務的理想選擇。在Python中執行Shell腳本可以實現一些操作系統級的功能,使程序更加靈活、易理解和易維護
在某些場景下,我們可能需要在Python程序中執行Shell命令。這樣的場景包括但不限于:
- 自動化部署:在部署應用程序時,我們可能需要執行一系列Shell命令,例如創建文件夾、復制文件等
- 系統管理:在管理服務器或操作系統時,我們可能需要執行一些Shell命令來獲取系統信息、監控狀態等
- 數據處理:有時候,我們可能需要調用一些Shell命令來處理數據,例如使用grep、awk等命令進行文本處理
那么,如何在Python中執行Shell腳本及數據交互呢?
2、Python集成Shell及數據交互
2.1、os模塊
os模塊的system()
函數提供了在Python中執行Shell腳本的一種簡單方法
以下是一個示例:
import os# 執行Shell命令
result = os.system("ls -l")
# 執行Shell腳本
result = os.system("shell_script.sh &")
# 執行Python腳本
result = os.system('python python_script.py &')# 打印Shell命令/腳本的退出狀態碼
print(result)
值得注意的是,os模塊的system()
函數的返回值為該Shell命令/腳本的退出狀態碼,常見的退出狀態碼:0:命令成功執行;1:一般錯誤(非特定錯誤);2:錯誤的shell命令語法;126:命令不可執行;127:未找到命令
另外,os模塊的system()
函數是阻塞式的。system()
函數在執行時會創建一個子進程執行命令,等子進程執行結束后才會返回到主進程中繼續執行,同時子進程的執行結果無法影響主進程。因此,可以在命令/腳本后面添加運算符&
,它將命令/腳本放在后臺執行(非阻塞式)
2.2、Subprocess模塊
Python的Subprocess模塊提供了更靈活的方式來執行Shell命令/腳本,并獲取其輸出結果。Subprocess是Python標準庫中推薦用來執行shell命令的模塊
Subprocess模塊提供了多個函數來執行Shell命令/腳本,其中最常用的有subprocess.run()
函數和subprocess.call()
函數,它們都會創建一個新的子進程,運行Shell腳本,等待其完成,然后返回一個CompletedProcess實例(阻塞式)
官方文檔:https://docs.python.org/3/library/subprocess.html#subprocess.run
以下是一個示例:
import subprocess# 執行Shell命令
result = subprocess.run(['ls', '-l'], capture_output=True, text=True)
# 執行Shell腳本
result = subprocess.run(['shell_script.sh &'], capture_output=True, text=True)# 獲取Shell命令/腳本的執行結果
print(result.stdout)
上述代碼中,我們通過設置capture_output=True
可以捕獲命令/腳本的輸出,并通過設置text=True
將輸出的字節類型自動轉成字符串
subprocess.run()
函數的返回值是一個CompletedProcess對象,其中包含了命令的執行結果。我們可以通過訪問stdout
屬性來獲取命令的標準輸出。如果命令執行失敗,subprocess.run()
函數將會拋出一個CalledProcessError異常
參考文章:
https://www.cnblogs.com/sureZ-learning/p/17274738.html
https://geek-docs.com/python/python-ask-answer/90_tk_1701997486.html
https://blog.51cto.com/u_16175439/6915896