做cad室內(nèi)平面圖的家具素材網(wǎng)站網(wǎng)絡(luò)公司關(guān)鍵詞排名
subprocess 模塊是 2.4 版本中新增的模塊, 它允許您生成新進(jìn)程,連接到它們的 輸入 / 輸出 / 錯(cuò)誤 管道,并獲得它們的返回碼 (狀態(tài)信息), 該模塊的目的在于取代幾個(gè)較舊的模塊和功能
subprocess 模塊可以用于執(zhí)行系統(tǒng)命令, 拿到執(zhí)行的結(jié)果, 速度比較的快, 并且它允許你創(chuàng)建一個(gè)新的進(jìn)程讓其去執(zhí)行另外的程序, 并與它進(jìn)行通信,獲取標(biāo)準(zhǔn)的輸入、標(biāo)準(zhǔn)輸出、標(biāo)準(zhǔn)錯(cuò)誤以及返回碼等
1、簡(jiǎn)單執(zhí)行命令拿到結(jié)果
import subprocess# shell是開啟一個(gè)終端,stdout正確結(jié)果,stderr錯(cuò)誤結(jié)果
obj = subprocess.Popen('dir', # 在終端運(yùn)行的命令shell=True, # 新開一個(gè)終端stdout=subprocess.PIPE, # 執(zhí)行完命令, 將正確輸出放到一個(gè)管道里stderr=subprocess.PIPE) # 將錯(cuò)誤輸出放到一個(gè)管道里
# 正確的輸出結(jié)果
result = obj.stdout.read() # 拿到的是 bytes 格式的字符,生成的結(jié)果需要解碼,
result = result.decode('gbk') # 在windows需要使用gbk編碼,linux和mac上是"utf-8"
print(result)# 錯(cuò)誤的輸出結(jié)果
error_res = obj.stderr.read()
error_res = error_res.decode('gbk')
print(error_res)
輸出結(jié)果:
C:\Users\Anita\AppData\Local\Programs\Python\Python38\python.exe D:\systemdoc\desk\subprocess模塊\demo001.py 驅(qū)動(dòng)器 D 中的卷是 新加卷卷的序列號(hào)是 48E6-1CBAD:\systemdoc\desk\subprocess模塊 的目錄2024/06/18 21:50 <DIR> .
2024/06/18 21:50 <DIR> ..
2024/06/18 21:28 <DIR> .idea
2024/06/18 21:50 744 demo001.py1 個(gè)文件 744 字節(jié)3 個(gè)目錄 43,191,549,952 可用字節(jié)
2、將第一次執(zhí)行命令拿到的結(jié)果進(jìn)行第二次操作
import subprocessres1 = subprocess.Popen( # 開啟的第一的進(jìn)程"dir",shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE,
)res2 = subprocess.Popen( # 開啟的第二個(gè)進(jìn)程"findstr demo*", #在dir的結(jié)果中查詢包含demo*的文件shell=True,stdin=res1.stdout, # 將第一個(gè)進(jìn)程的正確輸出結(jié)果拿到做處理stdout=subprocess.PIPE,stderr=subprocess.PIPE,
)result = res2.stdout.read()
result = str(result, encoding="gbk")
print(result)
運(yùn)行結(jié)果:
C:\Users\Anita\AppData\Local\Programs\Python\Python38\python.exe D:\systemdoc\desk\subprocess模塊\demo001.py
2024/06/18 21:56 487 demo001.py
3、直接一條終端命令實(shí)現(xiàn)上面的操作
import subprocessres1 = subprocess.Popen("dir | findstr demo*", # 使用管道符號(hào)運(yùn)行命令shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE,
)result = res1.stdout.read()
result = str(result, encoding="gbk")
print(result)