Python實(shí)現(xiàn)執(zhí)行Shell命令并獲取輸出
在本文中,我們將學(xué)習(xí)如何借助 os.system() 從 Python 腳本執(zhí)行 cmd 命令。 我們還將學(xué)習(xí)如何借助 Python 中的 subprocess 模塊以更簡單的方式從腳本執(zhí)行 cmd 命令。
從 Python 腳本執(zhí)行 CMD 命令并使用 os.system() 獲取輸出
我們出于不同目的在命令提示符或任何其他終端中執(zhí)行終端命令。 但是,有時(shí),需要在腳本內(nèi)運(yùn)行特定命令。
我們將了解如何直接在 Python 腳本中執(zhí)行它們。 當(dāng)我們進(jìn)行服務(wù)器配置時(shí),它非常方便。
首先,讓我們向您展示一些在終端中工作的命令,例如 dir、cd 或 md。

現(xiàn)在,我們將了解如何在 Python 腳本中包含相同的內(nèi)容。 為此,我們將導(dǎo)入一個(gè)名為 os.
os 模塊將幫助我們與操作系統(tǒng)進(jìn)行交互。 os 模塊對文件和文件夾管理等操作系統(tǒng)任務(wù)提供廣泛的支持。
讓我們進(jìn)入代碼。 system() 是一個(gè)在類似 shell 中執(zhí)行命令的方法,因此如果我們給它任何命令,它就會(huì)繼續(xù)執(zhí)行它們,就像我們在終端中執(zhí)行它們一樣。
系統(tǒng)函數(shù)還可以執(zhí)行一堆命令。 它執(zhí)行您可以在終端中運(yùn)行的每個(gè)命令。
我們將使用 try 塊,在該塊內(nèi),我們將使用 system() 方法,這將幫助我們使用終端與操作系統(tǒng)進(jìn)行交互。 如果 try 塊沒有執(zhí)行指定的命令,我們將進(jìn)入 except 塊。
在 system() 方法內(nèi)部,我們必須傳遞命令,但命令類型是 cmd。 為此,我們使用 /k,并在單引號(hào)或雙引號(hào)內(nèi)輸入我們的命令。
import os
try:
os.system('cmd /k "date"')
except:
print('Could not execute command')
讓我們運(yùn)行一下,看看這是否給出了準(zhǔn)確的輸出。
The current date is: 24/08/2022
Enter the new date: (dd-mm-yy)
我們可以看到輸出與命令提示符給出的相同。
您可以執(zhí)行很多命令。 您可以打開記事本或計(jì)算器,也可以查看系統(tǒng)信息等等。
如果你想獲取命令返回的內(nèi)容,可以使用 os 模塊的 popen() 函數(shù)獲取。 在這個(gè)函數(shù)內(nèi)部,我們可以傳遞命令并使用 readlines() 方法來獲取其內(nèi)容。
我們可以使用很多方法來獲取干凈的數(shù)據(jù)。 這取決于你。
import os
DATA=os.popen('help').readlines()[5].strip('\n')
print(DATA)
我們可以在任何地方使用這些命令,例如類、循環(huán)和函數(shù)。 這將正常工作,無需將其包裝在函數(shù)中。
import os
def CMD_Com():
DATA=os.popen('help').readlines()[5].strip('\n')
print(DATA)
CMD_Com()
輸出:
CACLS Displays or modifies access control lists (ACLs) of files.
從 Python 腳本執(zhí)行 CMD 命令并使用 Subprocess 模塊獲取輸出
與子流程交互是一項(xiàng)基本技能。 不建議使用 os 模塊在 Python 腳本內(nèi)執(zhí)行終端命令。
使用 os.system() 執(zhí)行終端命令是在 Python 中運(yùn)行命令的一種非常簡單的方法。
os.system() 的功能有限; 正確的方法是使用一個(gè)名為 subprocess 的模塊,這使得執(zhí)行終端命令不太具有挑戰(zhàn)性。 使用 subprocess 模塊,我們可以運(yùn)行當(dāng)前正在處理的所有操作系統(tǒng)命令。
這就是我們在操作系統(tǒng)中運(yùn)行所有現(xiàn)有命令的方式,例如打開記事本或檢查當(dāng)前工作目錄,或我們可以使用 subprocess 模塊執(zhí)行的任何其他操作。
import subprocess
# subprocess.Popen('notepad')
# subprocess.Popen('systeminfo')
subprocess.Popen("dir", shell=True)
輸出:
Directory of C:\Users\Dell\Downloads\demo
24/08/2022 07:01 pm <DIR> .
24/08/2022 07:01 pm <DIR> ..
25/08/2022 01:47 am 460 demo.py
1 File(s) 460 bytes
2 Dir(s) 32,532,512,768 bytes free
到此這篇關(guān)于Python實(shí)現(xiàn)執(zhí)行Shell命令并獲取輸出的文章就介紹到這了,更多相關(guān)python執(zhí)行Shell命令內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python調(diào)用REST API接口的幾種方式匯總
這篇文章主要介紹了Python調(diào)用REST API接口的幾種方式匯總,幫助大家更好的利用python進(jìn)行自動(dòng)化運(yùn)維,感興趣的朋友可以了解下2020-10-10
Python pymysql連接數(shù)據(jù)庫并將查詢結(jié)果轉(zhuǎn)化為Pandas dataframe
這篇文章主要為大家介紹了Python pymysql連接數(shù)據(jù)庫并將結(jié)果轉(zhuǎn)化為Pandas dataframe實(shí)現(xiàn)方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05
Python進(jìn)程間通信 multiProcessing Queue隊(duì)列實(shí)現(xiàn)詳解
這篇文章主要介紹了python進(jìn)程間通信 mulitiProcessing Queue隊(duì)列實(shí)現(xiàn)詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09
小結(jié)Python用fork來創(chuàng)建子進(jìn)程注意事項(xiàng)
今天看到別人的源代碼中有 fork 子進(jìn)程來操作數(shù)據(jù)。但是由于 fork 之后,沒有及時(shí)的退出,導(dǎo)致系統(tǒng)中的Python進(jìn)程越來越多,子進(jìn)程越來越多了。2014-07-07
MNIST數(shù)據(jù)集轉(zhuǎn)化為二維圖片的實(shí)現(xiàn)示例
這篇文章主要介紹了MNIST數(shù)據(jù)集轉(zhuǎn)化為二維圖片的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01

