Python | os.access 函數

最近更新時間 2020-12-04 11:02:37

os.access 函數使用當前 uid/gid 測試路徑是否有權限,主要用於判斷當前用戶對目錄或文件是否有查看、讀寫等權限。os.access 需要傳入 path 和 mode 參數,否則會拋 TypeError 異常。

函數定義

os.access(path, mode, *, dir_fd=None, effective_ids=False, follow_symlinks=True)

參數

  • checkpath - 目錄或文件路徑
  • checkmodel - 需要檢測的操作,可進行 “或” 運算來指定多個操作:
    • os.F_OK: 檢測路徑是否存在。
    • os.R_OK: 檢測路徑是否可讀。
    • os.W_OK: 檢測路徑是否可寫。
    • os.X_OK: 檢測路徑是否可執行。

返回值

  • checkTrue - 檢測通過返回 True 否則返回 False。

示例1: - 使用 os.access() 函數檢測文件是否存在和可讀寫。

# coding=utf-8

# Python3 代碼
# 使用 os.access() 檢測文件權限

# 引入 os 庫
import os

path = './nohup.out'

# 檢測文件是否存在
if (os.access(path, os.F_OK)):
    print('nohup.out 文件存在')

# 檢測文件是否可讀寫
if (os.access(path, os.W_OK|os.R_OK)):
    print('nohup.out 可讀寫')

if (not os.access(path, os.X_OK)):
    print('nohup.out 不可執行')
nohup.out 文件存在
nohup.out 可讀寫
nohup.out 不可執行
注:即使 os.access 返回 True ,在實際操作仍可能會失敗,特別是對網絡文件系統的操作。

在 3.6 版本後 path 可以支持類路徑對象。

示例2: - 使用 os.access() 函數檢測文件權限,再使用 open() 函數打開文件。推薦使用 EAFP 技術,如下所示:

# coding=utf-8

# Python3 代碼
# 使用 os.access() 檢測文件權限

# 引入 os 庫
import os

path = './nohup.out'

# 檢測文件權限,讀取文件
if os.access(path, os.R_OK):
    with open(path) as fp:
        # 讀取文件內容
        print(fp.read())

# 推薦使用,EAFP 技術,如下所示
try:
    fp = open(path)
except PermissionError:
    # 可進行錯誤處理或設置默認值
    pass
else:
    with fp:
        # 讀取文件內容
        print(fp.read())
文件內容...
rss_feed