Python 模塊 os 可以訪問操作系統(operating system)相關的特性。
os 模塊為許多操作系統,如posic, nt, mac 提供了一個封裝層(wrappers)。它提供的的接口(API)可以在各個系統之間通用,從而增加了代碼的可移植性(portability)。儘管如此,並不是所有的函數都是通用的,例如許多進程管理的函數不能用在 windows 中。
訪問文件系統
listdir() 函數列出當前目錄的內容
walk() 函數遞歸(recursively)訪問當前目錄的內容和子目錄。生成一個元組(tuple),包含三個元素:路徑名稱,當前目錄的子目錄和文件列表。
輸出:
scandir() 函數能比 listdir() 函數返回更多的信息,它返回的是一個 DirEntry 對象序列,DirEntry 對象可以訪問到文件的更多元信息。
輸出:
管理文件系統的權限
訪問文件的詳情,使用 stat() 或者 lstat()(查詢軟連接 symbolic link) 函數。
輸出:
在 Unix-like 系統中,使用 chmod() 更改文件的權限,傳入一個整數,代表要更改的文件模式,這個整數可以用 stat 模塊的函數生成。
輸出:
第一次執行時,文件默認權限是:0o644,是沒有執行權限的。所以os.access(filename, os.X_OK) 返回 False。程序流程進入 if 分支,使用 chmod() 函數添加了執行權限。
第二次執行時,文件權限為:0o744。存在可執行權限,代碼進入了 else 分支,刪除了執行權限。
這裡使用 access() 方法判斷文件是否有執行權限,第二個參數值為 os.X_OK。還有其他的模式:
- os.F_OK 測試路徑是否存在
- os.R_OK 測試路徑是否可讀
- os.W_OK 測試路徑是否可寫
- os.X_OK 測試路徑是否可執行
stat 模塊的 S_IMODE() 函數返回 chmod 格式的一個整數值。
創建和刪除目錄
os 模塊提供了很多函數可以創建目錄,創建文件,刪除文件,刪除目錄。
輸出:
一共有兩組方法可以添加和刪除目錄,函數 mkdir() 創建目錄,前提是所有的子目錄必須存在。rmdir() 函數刪除目錄,只刪除最後一個目錄。
函數 makedirs() 和 removedirs() 創建和刪除路徑中所有的目錄節點。
軟連接 Symbolic Links
調用軟連接函數,需要有底層系統支持。
輸出:
創建軟連接用 symlink() 函數,第一個參數是原始文件,第二個參數是軟連接路徑。
使用 lstat() 函數讀取軟連接的信息, readlink() 函數返回軟連接指向的實際文件。
管理當前進程工作目錄
當前工作目錄是指進程開始運行時的所在的目錄,可以通過 getcwd() 函數獲取,通過 chdir() 函數改變。
輸出:
os.curdir 和 os.pardir 分別以更便攜的方式訪問當前目錄和父目錄。
管理系統的環境變量 Environment variables
os 模塊還可以設置和獲取系統的環境變量,環境變量包含了一些配置信息,例如搜索路徑(search paths),文件位置,debug標誌位等等。
os.environ對象 和 getenv() 函數都可以獲取環境變量。
以下例子演示瞭如果獲取和刪除環境變量。
輸出:
運行外部的命令
就基礎的運行外部命令的方法是使用 system() 函數,它接收一個字符串參數,這個字符串就是要在子進程中運行的命令。
輸出:
打印了當前目錄名稱。返回的整數是子進程執行完畢後,返回的值。
因為執行的命令是直接發給 shell 的,可以使用 shell 的語法,例如輸出一個環境變量:
輸出:
打印環境變量 $TMPDIR,輸出系統的臨時目錄路徑。
除非明確讓命令後臺運行,否則 system() 函數執行完子進程後才返回。
輸出:
程序運行中間睡眠了3秒,才打印第二個日期。
改一下 system 命令,放到後臺執行
執行結果:
命令後面加 & 字符,把命令放到後臺執行,最後 time.sleep(5) 睡眠5秒,等待子進程完成後再退出父進程。查看輸出,最後才打印了第二個日期。
閱讀更多 趣喜歡編程 的文章