Python 模塊 OS

Python 模塊 OS

Python 模塊 os 可以訪問操作系統(operating system)相關的特性。

os 模塊為許多操作系統,如posic, nt, mac 提供了一個封裝層(wrappers)。它提供的的接口(API)可以在各個系統之間通用,從而增加了代碼的可移植性(portability)。儘管如此,並不是所有的函數都是通用的,例如許多進程管理的函數不能用在 windows 中。

訪問文件系統


listdir() 函數列出當前目錄的內容

Python 模塊 OS

walk() 函數遞歸(recursively)訪問當前目錄的內容和子目錄。生成一個元組(tuple),包含三個元素:路徑名稱,當前目錄的子目錄和文件列表。

Python 模塊 OS

輸出:

Python 模塊 OS

scandir() 函數能比 listdir() 函數返回更多的信息,它返回的是一個 DirEntry 對象序列,DirEntry 對象可以訪問到文件的更多元信息。

Python 模塊 OS

輸出:

Python 模塊 OS

管理文件系統的權限


訪問文件的詳情,使用 stat() 或者 lstat()(查詢軟連接 symbolic link) 函數。

Python 模塊 OS

輸出:

Python 模塊 OS

在 Unix-like 系統中,使用 chmod() 更改文件的權限,傳入一個整數,代表要更改的文件模式,這個整數可以用 stat 模塊的函數生成。

Python 模塊 OS

輸出:

Python 模塊 OS

第一次執行時,文件默認權限是: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 模塊提供了很多函數可以創建目錄,創建文件,刪除文件,刪除目錄。

Python 模塊 OS

輸出:

Python 模塊 OS

一共有兩組方法可以添加和刪除目錄,函數 mkdir() 創建目錄,前提是所有的子目錄必須存在。rmdir() 函數刪除目錄,只刪除最後一個目錄。

函數 makedirs() 和 removedirs() 創建和刪除路徑中所有的目錄節點。

軟連接 Symbolic Links


調用軟連接函數,需要有底層系統支持。

Python 模塊 OS

輸出:

Python 模塊 OS

創建軟連接用 symlink() 函數,第一個參數是原始文件,第二個參數是軟連接路徑。

使用 lstat() 函數讀取軟連接的信息, readlink() 函數返回軟連接指向的實際文件。

管理當前進程工作目錄


當前工作目錄是指進程開始運行時的所在的目錄,可以通過 getcwd() 函數獲取,通過 chdir() 函數改變。

Python 模塊 OS

輸出:

Python 模塊 OS

os.curdir 和 os.pardir 分別以更便攜的方式訪問當前目錄和父目錄。

管理系統的環境變量 Environment variables


os 模塊還可以設置和獲取系統的環境變量,環境變量包含了一些配置信息,例如搜索路徑(search paths),文件位置,debug標誌位等等。

os.environ對象 和 getenv() 函數都可以獲取環境變量。

以下例子演示瞭如果獲取和刪除環境變量。

Python 模塊 OS

輸出:

Python 模塊 OS

運行外部的命令


就基礎的運行外部命令的方法是使用 system() 函數,它接收一個字符串參數,這個字符串就是要在子進程中運行的命令。

Python 模塊 OS

輸出:

Python 模塊 OS

打印了當前目錄名稱。返回的整數是子進程執行完畢後,返回的值。

因為執行的命令是直接發給 shell 的,可以使用 shell 的語法,例如輸出一個環境變量:

Python 模塊 OS

輸出:

Python 模塊 OS

打印環境變量 $TMPDIR,輸出系統的臨時目錄路徑。

除非明確讓命令後臺運行,否則 system() 函數執行完子進程後才返回。

Python 模塊 OS

輸出:

Python 模塊 OS

程序運行中間睡眠了3秒,才打印第二個日期。

改一下 system 命令,放到後臺執行

Python 模塊 OS

執行結果:

Python 模塊 OS

命令後面加 & 字符,把命令放到後臺執行,最後 time.sleep(5) 睡眠5秒,等待子進程完成後再退出父進程。查看輸出,最後才打印了第二個日期。


分享到:


相關文章: