Python學習22-外部程序的調(diào)用&裝飾器

查看所有Python相關(guān)學習筆記

調(diào)用外部程序

  • python是粘合語言
    • 現(xiàn)成的工具軟件,它們都可以完成一些功能(wget,ffmpeg)ffmpeg 用于win上錄制視屏
    • 有時需要擴展以下,添加一點功能(free)free Linux查看內(nèi)存占用率
    • 有時需要把工具軟件結(jié)合起來(free、gnuplot)
    • 粘合各種外部程序和各種語言的庫,實現(xiàn)功能

兩種方法:

1、os.system

  • os庫里面的system函數(shù)
  • 等于打開操作移動的shell,敲入一串命令
  • 比如 mspaint 命令(畫圖)
  • 需要等待被調(diào)用的程序退出,才能返回
import os
os.system('mspaint') # win下調(diào)用畫圖程序
# os.system('mspaint d:\1.jpg') #用戶圖程序自動打開圖片
print('after call')
  • ffmpeg
  • 退出碼(通過退出碼判斷是否正常運行(調(diào)用是否成功))
import os
ret = os.system('ls') # mac下列出當前目錄所包含的文件
print('.................')
print(ret) # 打印退出碼,==0 表示調(diào)用成功
print('---------------------')
ret = os.system('ls dd') # mac下列出當前目錄所包含的文件
print('.................')
print(ret) # 打印退出碼,!=0 表示調(diào)用失敗
# 執(zhí)行結(jié)果
異常.py
連接Linux.py
.................
0
---------------------
.................
256
ls: dd: No such file or directory
Linux的命令:ls ;echo $?
通常退出碼為0,表示成功

2、subprocess

  • 可以調(diào)用外部程序,且可以獲得外部程序的輸出內(nèi)容
  • 可以輸入
  • subprocess.check_output 需要等待被調(diào)用的程序退出,才能返回
import subprocess
    # shell=True表示使用終端shell執(zhí)行程序,Windows下面就是cmd.exe
    # 就是我們python程序調(diào)用cmd.exe再由cmd.ext執(zhí)行 參數(shù)命令
ret = subprocess.check_output('dir',shell=True,encoding='gbk')
    # 如果有中文,需要decode,因為是中文os,所以cmd.exe輸出是gbk編碼
    # dir 目錄   可以查看該目錄下包含哪些文件
print(ret)
    # 如果不指定enconding,返回的就是字節(jié)串
    # print(ret.decode('gbk'))
  • subprocess庫里面的Popen類,可以:
    • 被調(diào)用程序運行時候,就獲取其輸出的信息

    • 運行時,輸入一些信息給被調(diào)用程序

    • 非阻塞式調(diào)用

    • 輸入輸出重定向

裝飾器

函數(shù)里再定義函數(shù)(只在第一層函數(shù)內(nèi)有效)

函數(shù)里再定義類(只在第一層函數(shù)內(nèi)有效)

裝飾器

  • 定義類的靜態(tài)方法時,就使用了裝飾器。
@staticmethod
def jump()
    print('3 meters high')
  • 裝飾器的特點是用一個@開頭的字符串
  • 在我們閱讀別人的代碼時,會經(jīng)常碰到裝飾器
  • 裝飾器通常用來裝飾函數(shù)
  • 裝飾器主要用來給函數(shù)增加一點功能/改變一些功能
  • 一般裝飾器本身也是一個函數(shù)(callable)
  • 我們可以想象成它包含了被裝飾的函數(shù)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容