os.access() 함수로 디렉터리 권한 확인하기
Python에서는 os.access(path, mode) 함수를 사용하여 특정 디렉터리의 읽기, 쓰기, 실행 권한을 손쉽게 확인할 수 있습니다. 각 권한은 다음 상수로 지정합니다.
os.R_OK: 읽기 권한os.W_OK: 쓰기 권한os.X_OK: 실행 권한
디렉터리에 파일을 생성하려면 쓰기 권한뿐만 아니라 실행 권한도 함께 필요합니다. 아래 예제를 참고하세요.
>>> import os
>>> os.access('my_folder', os.R_OK) # 읽기 권한 확인
True
>>> os.access('my_folder', os.W_OK) # 쓰기 권한 확인
True
>>> os.access('my_folder', os.X_OK) # 실행 권한 확인
True
>>> os.access('my_folder', os.X_OK | os.W_OK) # 디렉터리에 파일 쓰기 가능 여부 확인
True
위 마지막 예제처럼 비트 OR 연산자(|)를 사용하면 여러 권한을 한 번에 조합하여 검사할 수 있습니다.
EAFP 스타일: 허락보다 용서가 쉽다
Python 커뮤니티에서 널리 사용되는 관용구 중 하나는 EAFP(Easier to Ask Forgiveness than Permission), 즉 "허락을 구하는 것보다 용서를 구하는 것이 쉽다"입니다. 이 방식에서는 권한을 미리 검사하는 대신, 해당 디렉터리에 실제로 쓰기를 시도한 뒤 권한이 없을 경우 발생하는 오류를 처리합니다.
import os
try:
with open(os.path.join('my_folder', 'test.txt'), 'w') as f:
f.write('테스트 내용')
except PermissionError:
print('해당 디렉터리에 쓰기 권한이 없습니다.')
이 방식은 권한 검사와 실제 작업 사이에 권한이 변경되는 경쟁 상태(race condition)를 방지할 수 있어 더 안전하다는 장점이 있습니다. 간단한 사전 점검이 필요하면 os.access()를, 실제 파일 작업 시에는 EAFP 패턴을 사용하는 것이 좋습니다.