파이썬에서 파일 권한을 변경해야 하는 이유
리눅스나 macOS 같은 유닉스 계열 운영체제에서 파일에는 읽기(read), 쓰기(write), 실행(execute) 권한이 부여됩니다. 파이썬 코드 내에서 파일의 권한을 직접 변경해야 하는 경우가 종종 있는데, 대표적인 방법은 os.chmod() 함수를 사용하는 것입니다.
1. os.chmod() 함수 사용하기
os.chmod(file, mode)를 호출하면 지정한 파일의 권한을 변경할 수 있습니다. 이때 주의할 점은 mode 값은 반드시 8진수(octal) 표기법으로 작성해야 하며, 0o 접두사로 시작해야 한다는 것입니다.
예를 들어 파일을 모든 사용자에게 읽기·쓰기·실행 권한을 모두 허용하려면 0o777을, 읽기 전용으로 만들고 싶다면 0o444를 사용합니다.
>>> import os
>>> os.chmod('my_file', 0o444) # 읽기 전용으로 변경
>>> os.chmod('my_file', 0o777) # 모든 권한 허용
권한 숫자의 의미
- 7 = 4+2+1 : 읽기 + 쓰기 + 실행 (모든 권한)
- 6 = 4+2 : 읽기 + 쓰기
- 4 : 읽기 전용
- 0 : 권한 없음
세 자리 숫자는 각각 소유자(owner), 그룹(group), 기타 사용자(others)에 대한 권한을 의미합니다.
2. stat 모듈의 플래그 활용하기
stat 모듈에서 제공하는 상수 플래그를 사용하면 가독성 높은 코드를 작성할 수 있습니다. 예를 들어 stat.S_IRUSR(소유자 읽기 권한), stat.S_IWGRP(그룹 쓰기 권한) 등의 상수를 비트 OR(|) 연산으로 조합해 사용할 수 있습니다.
관련 플래그의 자세한 목록은 파이썬 공식 문서의 stat 라이브러리 페이지에서 확인할 수 있습니다.
3. subprocess로 chmod 명령 실행하기
운영체제의 chmod 명령어를 그대로 호출하고 싶다면 subprocess 모듈을 활용할 수도 있습니다.
>>> import subprocess
>>> subprocess.call(['chmod', '0444', 'my_file'])
이 방식은 셸 명령을 실행하는 것이므로 유닉스 계열 시스템에서만 동작한다는 점을 유의하세요. 순수하게 파이썬 코드만으로 처리하고 싶다면 첫 번째 방법인 os.chmod()를 사용하는 것이 가장 안전하고 이식성이 좋습니다.
마무리 정리
| 방법 | 특징 |
|---|---|
| os.chmod() | 표준적이고 이식성이 좋으며, 8진수 또는 stat 상수 사용 가능 |
| stat 모듈 플래그 | 상수 이름으로 권한을 표현해 코드 가독성 향상 |
| subprocess.call() | 셸의 chmod 명령을 그대로 실행 (유닉스 계열 전용) |
일반적으로는 os.chmod()와 stat 모듈을 함께 사용하는 방식이 가장 권장됩니다.