Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python의 posix 모듈: 주요 POSIX 시스템 호출 완벽 정리

posix 모듈은 UNIX 환경에서 동작하며, 운영체제(OS)가 제공하는 다양한 기능을 Python에서 직접 사용할 수 있게 해주는 표준 라이브러리입니다.

posix 모듈과 os 모듈의 관계

일반적으로 posix 모듈을 직접 임포트하지 않고 os 모듈을 사용하는 것이 권장됩니다. UNIX 시스템에서 os 모듈은 posix 모듈의 상위 집합(superset) 역할을 하기 때문입니다.

반면 Windows와 같은 비(非)UNIX 시스템에서는 posix 모듈 자체를 사용할 수 없지만, os 모듈은 일부 기능이 제한된 상태로 계속 사용할 수 있습니다. 따라서 이식성(portability)을 고려한다면 os 모듈을 사용하는 것이 좋습니다.

그래도 posix 모듈을 직접 사용해야 한다면 아래와 같이 임포트합니다.

import posix

주요 상수: posix.environ

environ은 환경 변수를 담고 있는 딕셔너리(dictionary) 객체입니다. UNIX 환경에서는 키(key)와 값(value)이 모두 바이트(bytes) 타입이라는 점에 유의해야 합니다.

예를 들어 environ[b'HOME']을 호출하면 현재 시스템의 홈 디렉터리 경로를 확인할 수 있습니다.

중요한 점은 이 딕셔너리의 항목을 수정해도 execv(), popen() 같은 다른 메서드에 전달되는 인자에는 영향을 주지 않는다는 것입니다. 실제로 환경을 변경하려면 다음 방법 중 하나를 사용해야 합니다.

  • 수정한 environ 딕셔너리를 execve() 메서드에 직접 전달
  • system() 또는 popen() 메서드에 전달하는 명령 문자열 안에 변수 할당과 export 구문을 포함

주요 메서드

posix.open(file_name, mode)

POSIX의 open() 메서드는 로컬 디스크에 있는 파일을 열고 파일 디스크립터(file descriptor)를 반환합니다. 파일 디스크립터가 닫히면, open() 메서드는 새 파일을 열 때 동일한 번호의 디스크립터를 재사용합니다.

posix.read(file_descriptor, size)

read() 메서드는 파일 디스크립터를 이용해 파일 내용을 읽어옵니다. 두 번째 인자인 size는 한 번에 읽을 수 있는 최대 바이트 수를 의미합니다. 경로를 지정하지 않으면 현재 작업 디렉터리를 기준으로 동작합니다.

예제 코드

아래 예제는 fruits라는 파일을 열고, 내용을 읽은 뒤 홈 디렉터리를 출력하는 코드입니다.

import posix

fruit_fd = posix.open("fruits", 0)
print(fruit_fd)  # 파일 디스크립터 출력
val = posix.read(fruit_fd, 512)
print(val)
print("홈 디렉터리: " + str(posix.environ[b'HOME']))

실행 결과

$ python3 posix_example.py
3
b'Mango\nOrange\nBanana\nApple\nGuava\nGrape\nRaspberry\nBlueberry\nPineapple\nWatermelon\n'
The Home Directory: b'/home/unix_user'

출력 결과에서 볼 수 있듯이, 파일 디스크립터는 정수 값(여기서는 3)으로 반환되며, read() 메서드는 파일 내용을 바이트 문자열 형태로 반환합니다. 또한 environ 딕셔너리의 HOME 값도 바이트 타입으로 출력되는 것을 확인할 수 있습니다.