"os" --- 기타 운영 체제 인터페이스
**********************************

**소스 코드:** Lib/os.py

======================================================================

이 모듈은 운영 체제 종속 기능을 사용하는 이식성 있는 방법을 제공합니다
. 파일을 읽거나 쓰고 싶으면 "open()"을 보세요, 경로를 조작하려면
"os.path" 모듈을 보시고, 명령 줄에서 주어진 모든 파일의 모든 줄을 읽으
려면 "fileinput" 모듈을 보십시오. 임시 파일과 디렉터리를 만들려면
"tempfile" 모듈을 보시고, 고수준의 파일과 디렉터리 처리는 "shutil" 모
듈을 보십시오.

이러한 기능의 가용성에 대한 참고 사항:

* 내장된 모든 운영 체제 종속적인 파이썬 모듈의 설계는, 같은 기능을 사
  용할 수 있는 한, 같은 인터페이스를 사용합니다; 예를 들어, 함수
  "os.stat(path)"는 *path* 에 대한 stat 정보를 같은 (POSIX 인터페이스
  에서 기원한) 형식으로 반환합니다.

* 특정 운영 체제에 고유한 확장도 "os" 모듈을 통해서 사용할 수 있지만,
  이러한 기능을 사용하는 것은 물론 이식성에 대한 위협입니다.

* 경로 또는 파일명을 받아들이는 모든 함수는 바이트열과 문자열 객체를
  모두 허용하며, 경로나 파일명이 반환되면 같은 형의 객체를 반환합니다.

* VxWorks에서 os.fork, os.execv 및 os.spawn*p*는 지원되지 않습니다.

참고:

  이 모듈의 모든 함수는, 올바르지 않거나 액세스할 수 없는 파일명과 경
  로일 때, 또는 올바른 형의 인자이지만, 운영 체제에서 허용하지 않으면
  "OSError"(또는 이것의 서브 클래스)를 발생시킵니다.

exception os.error

   내장 "OSError" 예외의 별칭.

os.name

   임포트 된 운영 체제 종속 모듈의 이름. 다음과 같은 이름이 현재 등록
   되어있습니다: "'posix'", "'nt'", "'java'".

   더 보기:

     "sys.platform"는 더 세분되어 있습니다. "os.uname()"은 시스템 종속
     버전 정보를 제공합니다.

     "platform" 모듈은 시스템의 아이덴티티에 대한 자세한 검사를 제공합
     니다.


파일명, 명령 줄 인자 및 환경 변수
=================================

파이썬에서는, 파일명, 명령 줄 인자 및 환경 변수가 문자열형을 사용하여
표시됩니다. 일부 시스템에서는, 운영 체제에 전달하기 전에 이러한 문자열
을 바이트열로 인코딩하는 것이 필요합니다. 파이썬은 파일 시스템 인코딩
을 사용하여 이 변환을 수행합니다 ("sys.getfilesystemencoding()"을 참조
하세요).

버전 3.1에서 변경: 일부 시스템에서는, 파일 시스템 인코딩을 사용한 변환
이 실패할 수 있습니다. 이때, 파이썬은 surrogateescape 인코딩 에러 처리
기를 사용하는데, 디코딩할 때 디코딩 할 수 없는 바이트가 유니코드 문자
U+DCxx로 치환되고, 다시 인코딩할 때 원래 바이트로 변환됩니다.

파일 시스템 인코딩은 128보다 작은 모든 바이트를 성공적으로 디코딩함을
보장해야 합니다. 파일 시스템 인코딩이 이 보장을 제공하지 못하면, API
함수가 UnicodeError를 발생시킬 수 있습니다.


프로세스 매개 변수
==================

이 함수들과 데이터 항목은 현재 프로세스와 사용자에 관한 정보와 관련 연
산을 제공합니다.

os.ctermid()

   프로세스의 제어 터미널에 해당하는 파일명을 반환합니다.

   가용성: 유닉스.

os.environ

   문자열 환경을 나타내는 *매핑* 객체입니다. 예를 들어,
   "environ['HOME']"은 홈 디렉터리의 경로명이며 (일부 플랫폼에서), C의
   "getenv("HOME")"과 같습니다.

   이 매핑은 "os" 모듈을 처음으로 임포트 할 때, 일반적으로 파이썬을 시
   작할 때 "site.py"를 처리하는 과정에서, 캡처됩니다. 이 시각 이후 변
   경된 환경은 "os.environ"을 직접 수정하여 변경한 경우를 제외하고는
   "os.environ"에 반영되지 않습니다.

   플랫폼이 "putenv()" 함수를 지원하면, 이 매핑은 환경을 조회하는 것뿐
   아니라 환경을 수정하는 데도 사용될 수 있습니다. 매핑이 수정될 때
   "putenv()"가 자동으로 호출됩니다.

   유닉스에서, 키와 값은 "sys.getfilesystemencoding()" 과
   "'surrogateescape'" 에러 처리기를 사용합니다. 다른 인코딩을 사용하
   려면 "environb"를 사용하십시오.

   참고:

     "putenv()"를 직접 호출해도 "os.environ"은 변경되지 않으므로,
     "os.environ"을 수정하는 것이 좋습니다.

   참고:

     FreeBSD 및 맥 OS X를 포함한 일부 플랫폼에서, "environ"을 설정하면
     메모리 누수가 발생할 수 있습니다. "putenv()"에 대한 시스템 설명서
     를 참조하십시오.

   "putenv()"가 제공되지 않으면, 이 매핑의 수정된 복사본을 적절한 프로
   세스 생성 함수에 전달하여 자식 프로세스가 수정된 환경을 사용하게 할
   수 있습니다.

   플랫폼이 "unsetenv()" 기능을 지원하면, 이 매핑의 항목을 삭제하여 환
   경 변수를 삭제할 수 있습니다. 항목이 "os.environ"에서 삭제되거나,
   "pop()" 또는 "clear()" 메서드 중 하나가 호출되면 "unsetenv()"가 자
   동으로 호출됩니다.

os.environb

   "environ"의 바이트열 버전: 환경을 바이트열로 나타내는 *매핑* 객체입
   니다. "environ"과 "environb"는 동기화됩니다 ("environb"를 수정하면
   "environ"이 갱신되고, 그 반대도 마찬가지입니다).

   "environb"는 "supports_bytes_environ"이 "True"인 경우에만 사용할 수
   있습니다.

   버전 3.2에 추가.

os.chdir(path)
os.fchdir(fd)
os.getcwd()

   이 함수는 파일과 디렉터리에 설명되어 있습니다.

os.fsencode(filename)

   "'surrogateescape'" 에러 처리기를, 또는 윈도우에서는 "'strict'"를,
   사용하여 파일 시스템 인코딩으로 *경로류* *filename* 을 인코딩합니다
   ; "bytes"를 변경하지 않고 반환합니다.

   "fsdecode()"는 역 함수입니다.

   버전 3.2에 추가.

   버전 3.6에서 변경: "os.PathLike" 인터페이스를 구현하는 객체를 받아
   들이도록 지원이 추가되었습니다.

os.fsdecode(filename)

   "'surrogateescape'" 에러 처리기를, 또는 윈도우에서는 "'strict'"를,
   사용하여 파일 시스템 인코딩으로 *경로류* *filename* 을 디코딩합니다
   ; "str"을 변경하지 않고 반환합니다.

   "fsencode()"는 역 함수입니다.

   버전 3.2에 추가.

   버전 3.6에서 변경: "os.PathLike" 인터페이스를 구현하는 객체를 받아
   들이도록 지원이 추가되었습니다.

os.fspath(path)

   경로의 파일 시스템 표현을 돌려줍니다.

   "str"이나 "bytes"가 전달되면, 변경되지 않은 상태로 반환됩니다. 그렇
   지 않으면 "__fspath__()"가 호출되고, 해당 값이 "str"이나 "bytes" 객
   체인 한 그 값이 반환됩니다. 다른 모든 경우에는 "TypeError"가 발생합
   니다.

   버전 3.6에 추가.

class os.PathLike

   파일 시스템 경로를 나타내는 객체(예를 들어 "pathlib.PurePath")의 *
   추상 베이스 클래스*입니다.

   버전 3.6에 추가.

   abstractmethod __fspath__()

      객체의 파일 시스템 경로 표현을 돌려줍니다.

      이 메서드는 "str"이나 "bytes" 객체만 반환해야 하며, "str"을 선호
      합니다.

os.getenv(key, default=None)

   존재하면 환경 변수 *key* 의 값을 반환하고, 그렇지 않으면 *default*
   를 반환합니다. *key*, *default* 및 결과는 str입니다.

   유닉스에서, 키와 값은 "sys.getfilesystemencoding()" 과
   "'surrogateescape'" 에러 처리기로 디코딩됩니다. 다른 인코딩을 사용
   하려면 "os.getenvb()"를 사용하십시오.

   가용성: 대부분의 유닉스, 윈도우.

os.getenvb(key, default=None)

   존재하면 환경 변수 *key* 의 값을 반환하고, 그렇지 않으면 *default*
   를 반환합니다. *key*, *default* 및 결과는 bytes입니다.

   "getenvb()"는 "supports_bytes_environ"이 "True"인 경우에만 사용할
   수 있습니다.

   가용성: 대부분의 유닉스.

   버전 3.2에 추가.

os.get_exec_path(env=None)

   셸과 비슷하게, 프로세스를 시작할 때 지정된 이름의 실행 파일을 검색
   할 디렉터리 리스트를 반환합니다. (지정된다면) *env* 는 PATH를 조회
   할 환경 변수 딕셔너리 여야 합니다. 기본적으로, *env* 가 "None"이면,
   "environ"이 사용됩니다.

   버전 3.2에 추가.

os.getegid()

   현재 프로세스의 유효(effective) 그룹 ID를 반환합니다. 이것은 현재
   프로세스에서 실행 중인 파일의 "set id" 비트에 해당합니다.

   가용성: 유닉스.

os.geteuid()

   현재 프로세스의 유효(effective) 사용자 ID를 반환합니다.

   가용성: 유닉스.

os.getgid()

   현재 프로세스의 실제(real) 그룹 ID를 반환합니다.

   가용성: 유닉스.

os.getgrouplist(user, group)

   *user*가 속한 그룹 ID의 목록을 돌려줍니다. *group* 이 목록에 없으면
   포함됩니다; 일반적으로 *group* 은 *user* 의 암호 레코드에서 그룹 ID
   필드로 지정됩니다.

   가용성: 유닉스.

   버전 3.3에 추가.

os.getgroups()

   현재 프로세스와 관련된 보충(supplemental) 그룹 ID 목록을 반환합니다
   .

   가용성: 유닉스.

   참고:

     맥 OS X에서, "getgroups()" 동작은 다른 유닉스 플랫폼과 약간 다릅
     니다. 파이썬 인터프리터가 "10.5" 또는 이전 버전의 배포 대상으로
     빌드되면, "getgroups()"는 현재 사용자 프로세스와 관련된 유효 그룹
     ID 목록을 반환합니다; 이 목록은 시스템 정의된 항목 수(일반적으로
     16)로 제한되며, 적절하게 권한이 부여된 경우 "setgroups()"를 호출
     하여 수정할 수 있습니다. "10.5"보다 큰 배포 대상으로 빌드되면,
     "getgroups()"는 프로세스의 유효 사용자 ID와 연관된 사용자에 대한
     현재 그룹 액세스 목록을 반환합니다; 그룹 액세스 목록은 프로세스
     수명 동안 변경될 수 있으며, "setgroups()" 호출의 영향을 받지 않고
     , 길이도 16개로 제한되지 않습니다. 배포 대상 값
     ("MACOSX_DEPLOYMENT_TARGET")은 "sysconfig.get_config_var()"를 통
     해 얻을 수 있습니다.

os.getlogin()

   프로세스의 제어 터미널에 로그인한 사용자의 이름을 반환합니다. 대부
   분 목적에서, "getpass.getuser()"를 사용하는 것이 더 유용한데, 이 함
   수는 환경 변수 "LOGNAME" 이나 "USERNAME"을 검사하여 사용자가 누구인
   지 알아내고, 현재 실제 사용자 ID의 로그인 이름을 얻기 위해
   "pwd.getpwuid(os.getuid())[0]"로 폴백 하기 때문입니다.

   가용성: 유닉스, 윈도우.

os.getpgid(pid)

   프로세스 ID *pid* 를 갖는 프로세스의 프로세스 그룹 ID를 반환합니다.
   *pid* 가 0이면, 현재 프로세스의 프로세스 그룹 id가 반환됩니다.

   가용성: 유닉스.

os.getpgrp()

   현재 프로세스 그룹의 ID를 반환합니다.

   가용성: 유닉스.

os.getpid()

   현재의 프로세스 ID를 반환합니다.

os.getppid()

   부모의 프로세스 ID를 반환합니다. 부모 프로세스가 종료했으면, 유닉스
   에서 반환된 id는 init 프로세스 (1) 중 하나이며, 윈도우에서는 여전히
   같은 id인데, 다른 프로세스에서 이미 재사용했을 수 있습니다.

   가용성: 유닉스, 윈도우.

   버전 3.2에서 변경: 윈도우에 대한 지원이 추가되었습니다.

os.getpriority(which, who)

   프로그램 스케줄 우선순위를 얻습니다. *which* 값은 "PRIO_PROCESS",
   "PRIO_PGRP" 또는 "PRIO_USER" 중 하나이고, *who*는 *which* 에 상대적
   으로 해석됩니다 ("PRIO_PROCESS" 면 프로세스 식별자, "PRIO_PGRP" 면
   프로세스 그룹 식별자, "PRIO_USER" 면 사용자 ID). 0 값의 *who*는 (각
   각) 호출하는 프로세스, 호출하는 프로세스의 프로세스 그룹, 호출하는
   프로세스의 실제 사용자 ID를 나타냅니다.

   가용성: 유닉스.

   버전 3.3에 추가.

os.PRIO_PROCESS
os.PRIO_PGRP
os.PRIO_USER

   "getpriority()" 와 "setpriority()" 함수의 매개 변숫값

   가용성: 유닉스.

   버전 3.3에 추가.

os.getresuid()

   현재 프로세스의 실제(real), 유효(effective) 및 저장된(saved) 사용자
   ID를 나타내는 튜플 (ruid, euid, suid)를 반환합니다.

   가용성: 유닉스.

   버전 3.2에 추가.

os.getresgid()

   현재 프로세스의 실제(real), 유효(effective) 및 저장된(saved) 그룹
   ID를 나타내는 튜플 (rgid, egid, sgid)를 반환합니다.

   가용성: 유닉스.

   버전 3.2에 추가.

os.getuid()

   현재 프로세스의 실제(real) 사용자 ID를 반환합니다.

   가용성: 유닉스.

os.initgroups(username, gid)

   지정된 사용자 이름이 구성원인 모든 그룹과 지정된 그룹 ID로 구성된
   그룹 액세스 목록을 초기화하기 위해 시스템 initgroups()를 호출합니다
   .

   가용성: 유닉스.

   버전 3.2에 추가.

os.putenv(key, value)

   *key* 라는 환경 변수를 문자열 *value* 로 설정합니다. 이러한 환경의
   변화는 "os.system()", "popen()" 또는 "fork()" 및 "execv()"로 시작된
   자식 프로세스에 영향을 줍니다.

   가용성: 대부분의 유닉스, 윈도우.

   참고:

     FreeBSD 및 맥 OS X를 포함한 일부 플랫폼에서, "environ"를 설정하면
     메모리 누수가 발생할 수 있습니다. putenv에 관한 시스템 설명서를
     참조하십시오.

   "putenv()"가 지원되면, "os.environ"의 항목에 대한 대입이 "putenv()"
   에 대한 해당 호출로 자동 변환됩니다. 그러나, "putenv()"에 대한 호출
   은 "os.environ"을 갱신하지 않으므로, 실제로는 "os.environ" 항목에
   대입하는 것이 좋습니다.

   "key", "value"를 인자로 감사 이벤트(auditing event) "os.putenv"를
   발생시킵니다.

os.setegid(egid)

   현재 프로세스의 유효 그룹 ID를 설정합니다.

   가용성: 유닉스.

os.seteuid(euid)

   현재 프로세스의 유효 사용자 ID를 설정합니다.

   가용성: 유닉스.

os.setgid(gid)

   현재 프로세스의 그룹 ID를 설정합니다.

   가용성: 유닉스.

os.setgroups(groups)

   현재 프로세스와 연관된 보충(supplemental) 그룹 ID의 목록을 *groups*
   로 설정합니다. *groups* 는 시퀀스 여야 하며, 각 요소는 그룹을 식별
   하는 정수여야 합니다. 이 연산은 대개 슈퍼 유저만 사용할 수 있습니다
   .

   가용성: 유닉스.

   참고:

     맥 OS X에서 *groups* 의 길이는 시스템이 정의한 최대 유효 그룹 ID
     수(일반적으로 16)를 초과할 수 없습니다. setgroups()를 호출해서 설
     정한 것과 같은 그룹 목록을 반환하지 않는 경우에 관해서는
     "getgroups()" 설명서를 참조하십시오.

os.setpgrp()

   구현된 (있기는 하다면) 버전에 따라 시스템 호출 "setpgrp()" 나
   "setpgrp(0, 0)"을 호출합니다. 의미에 대해서는 유닉스 매뉴얼을 참조
   하십시오.

   가용성: 유닉스.

os.setpgid(pid, pgrp)

   프로세스 ID가 *pid* 인 프로세스의 프로세스 그룹 ID를 *pgrp* 로 설정
   하기 위해 시스템 호출 "setpgid()"를 호출합니다. 의미에 대해서는 유
   닉스 매뉴얼을 참조하십시오.

   가용성: 유닉스.

os.setpriority(which, who, priority)

   프로그램 스케줄 우선순위를 설정합니다. *which* 값은 "PRIO_PROCESS",
   "PRIO_PGRP" 또는 "PRIO_USER" 중 하나이고, *who*는 *which* 에 상대적
   으로 해석됩니다 ("PRIO_PROCESS" 면 프로세스 식별자, "PRIO_PGRP" 면
   프로세스 그룹 식별자, "PRIO_USER" 면 사용자 ID). 0 값의 *who*는 (각
   각) 호출하는 프로세스, 호출하는 프로세스의 프로세스 그룹, 호출하는
   프로세스의 실제 사용자 ID를 나타냅니다. *priority* 는 -20에서 19 사
   이의 값입니다. 기본 우선순위는 0입니다; 우선순위가 낮으면 더 유리하
   게 스케줄 됩니다.

   가용성: 유닉스.

   버전 3.3에 추가.

os.setregid(rgid, egid)

   현재 프로세스의 실제(real) 및 유효한(effective) 그룹 ID를 설정합니
   다.

   가용성: 유닉스.

os.setresgid(rgid, egid, sgid)

   현재 프로세스의 실제(real), 유효(effective) 및 저장된(saved) 그룹
   ID를 설정합니다.

   가용성: 유닉스.

   버전 3.2에 추가.

os.setresuid(ruid, euid, suid)

   현재 프로세스의 실제(real), 유효(effective) 및 저장된(saved) 사용자
   ID를 설정합니다.

   가용성: 유닉스.

   버전 3.2에 추가.

os.setreuid(ruid, euid)

   현재 프로세스의 실제(real) 및 유효(effective) 사용자 ID를 설정합니
   다.

   가용성: 유닉스.

os.getsid(pid)

   시스템 호출 "getsid()"를 호출합니다. 의미에 대해서는 유닉스 매뉴얼
   을 참조하십시오.

   가용성: 유닉스.

os.setsid()

   시스템 호출 "setsid()"를 호출합니다. 의미에 대해서는 유닉스 매뉴얼
   을 참조하십시오.

   가용성: 유닉스.

os.setuid(uid)

   현재 프로세스의 사용자 ID를 설정합니다.

   가용성: 유닉스.

os.strerror(code)

   에러 코드 *code*에 해당하는 에러 메시지를 반환합니다. 알 수 없는 에
   러 코드가 주어질 때 "strerror()"가 "NULL"을 반환하는 플랫폼에서,
   "ValueError"가 발생합니다.

os.supports_bytes_environ

   환경의 원시 OS 형이 바이트열이면 "True" (예를 들어, 윈도우에서는
   "False").

   버전 3.2에 추가.

os.umask(mask)

   현재 숫자 umask를 설정하고 이전 umask를 반환합니다.

os.uname()

   현재 운영 체제를 식별하는 정보를 반환합니다. 반환 값은 5가지 어트리
   뷰트를 가진 객체입니다:

   * "sysname" - 운영 체제 이름

   * "nodename" - 네트워크상의 기계 이름 (구현이 정의)

   * "release" - 운영 체제 릴리스

   * "version" - 운영 체제 버전

   * "machine" - 하드웨어 식별자

   하위 호환성을 위해, 이 객체는 이터러블이기도 해서, "sysname",
   "nodename", "release", "version" 및 "machine"이 이 순서로 포함된 5-
   튜플처럼 작동합니다.

   일부 시스템에서는 "nodename"을 8자나 선행 구성 요소로 자릅니다; 호
   스트 이름을 얻는 더 좋은 방법은 "socket.gethostname()" 또는 더 나아
   가 "socket.gethostbyaddr(socket.gethostname())"입니다.

   가용성: 최근 유닉스.

   버전 3.3에서 변경: 반환형이 튜플에서 이름이 지정된 어트리뷰트를 가
   진 튜플류 객체로 변경되었습니다.

os.unsetenv(key)

   *key* 라는 이름의 환경 변수를 삭제합니다. 이러한 환경 변화는
   "os.system()", "popen()" 또는 "fork()" 및 "execv()"로 시작된 자식
   프로세스에 영향을 줍니다.

   "unsetenv()"가 지원되면, "os.environ"의 항목 삭제가 자동으로
   "unsetenv()"에 대한 해당 호출로 변환됩니다. 그러나 "unsetenv()"에
   대한 호출은 "os.environ"을 갱신하지 않으므로, 실제로는 "os.environ"
   항목을 삭제하는 것이 좋습니다.

   "key"를 인자로 감사 이벤트(auditing event) "os.unsetenv"를 발생시킵
   니다.

   가용성: 대부분의 유닉스.


파일 객체 생성
==============

이 함수들은 새로운 *파일 객체*를 만듭니다. (파일 기술자를 여는 것에 관
해서는 "open()"를 참조하십시오.)

os.fdopen(fd, *args, **kwargs)

   파일 기술자 *fd에* 연결된 열린 파일 객체를 반환합니다. 이것은
   "open()" 내장 함수의 별칭이며 같은 인자를 받아들입니다. 유일한 차이
   점은 "fdopen()"의 첫 번째 인자는 항상 정수여야 한다는 것입니다.


파일 기술자 연산
================

이 함수들은 파일 기술자를 사용하여 참조된 I/O 스트림에 작용합니다.

파일 기술자는 현재 프로세스에 의해 열린 파일에 대응하는 작은 정수입니
다. 예를 들어, 표준 입력은 보통 파일 기술자 0이고, 표준 출력은 1이며,
표준 에러는 2입니다. 프로세스에 의해 열린 추가 파일은 3, 4, 5 등으로
지정됩니다. "파일 기술자"라는 이름은 약간 기만적입니다; 유닉스 플랫폼
에서, 소켓과 파이프도 파일 기술자에 의해 참조됩니다.

"fileno()" 메서드는 필요할 때 *파일 객체*와 연관된 파일 기술자를 얻는
데 사용될 수 있습니다. 파일 기술자를 직접 사용하면 파일 객체 메서드를
거치지 않아서, 데이터의 내부 버퍼링과 같은 측면을 무시하게 되는 것에
유의하십시오.

os.close(fd)

   파일 기술자 *fd*를 닫습니다.

   참고:

     이 함수는 저수준 I/O를 위한 것이며, "os.open()" 또는 "pipe()"에
     의해 반환된 파일 기술자에 적용되어야 합니다. 내장 함수 "open()"
     나 "popen()" 또는 "fdopen()"에 의해 반환된 "파일 객체"를 닫으려면
     , "close()" 메서드를 사용하십시오.

os.closerange(fd_low, fd_high)

   에러는 무시하면서, *fd_low*(포함)부터 *fd_high*(제외)까지 모든 파일
   기술자를 닫습니다. 다음과 동등합니다 (하지만 훨씬 빠릅니다):

      for fd in range(fd_low, fd_high):
          try:
              os.close(fd)
          except OSError:
              pass

os.copy_file_range(src, dst, count, offset_src=None, offset_dst=None)

   *count* 바이트를 파일 기술자 *src*(오프셋 *offset_src*에서 시작하여
   )에서 파일 기술자 *dst*(오프셋 *offset_dst*에서 시작하여)로 복사합
   니다. *offset_src*가 None이면, 현재 위치에서 *src*를 읽습니다;
   *offset_dst*도 마찬가지입니다. *src*와 *dst*가 가리키는 파일은 같은
   파일 시스템에 있어야 합니다, 그렇지 않으면 "errno.EXDEV"로 설정된
   "errno"로 "OSError"가 발생합니다.

   이 복사는 커널에서 사용자 공간으로 데이터를 전송한 다음 다시 커널로
   전송하는 추가 비용 없이 수행됩니다. 또한, 일부 파일 시스템은 추가
   최적화를 구현할 수 있습니다. 두 파일이 바이너리로 열린 것처럼 복사
   가 수행됩니다.

   반환 값은 복사된 바이트의 양입니다. 이것은 요구된 양보다 적을 수 있
   습니다.

   가용성: 리눅스 커널 >= 4.5 또는 glibc >= 2.27.

   버전 3.8에 추가.

os.device_encoding(fd)

   *fd* 와 연관된 장치가 터미널에 연결되어 있을 때 인코딩을 설명하는
   문자열을 반환합니다; 그렇지 않으면 "None"을 반환합니다.

os.dup(fd)

   파일 기술자 *fd* 의 복사본을 반환합니다. 새 파일 기술자는 상속 불가
   능합니다.

   윈도우에서는, 표준 스트림(0: stdin, 1: stdout, 2: stderr)을 복제할
   때, 새 파일 기술자가 상속 가능합니다.

   버전 3.4에서 변경: 새로운 파일 기술자는 이제 상속 불가능합니다.

os.dup2(fd, fd2, inheritable=True)

   파일 기술자 *fd* 를 *fd2*에 복제하고, 필요하면 먼저 후자를 닫습니다
   . *fd2*를 반환합니다. 새로운 파일 기술자는 기본적으로 상속 가능하고
   , *inheritable* 이 "False"면 상속 불가능합니다.

   버전 3.4에서 변경: 선택적 *inheritable* 매개 변수를 추가했습니다.

   버전 3.7에서 변경: 성공하면 *fd2* 를 반환합니다. 이전에는 항상
   "None"을 반환했습니다.

os.fchmod(fd, mode)

   *fd* 에 의해 주어진 파일의 모드를 숫자 *mode* 로 변경합니다. *mode*
   의 가능한 값은 "chmod()" 문서를 참조하십시오. 파이썬 3.3부터는,
   "os.chmod(fd, mode)"와 같습니다.

   "path", "mode", "dir_fd"를 인자로 감사 이벤트(auditing event)
   "os.chmod"를 발생시킵니다.

   가용성: 유닉스.

os.fchown(fd, uid, gid)

   *fd* 에 의해 주어진 파일의 소유자와 그룹 id를 숫자 *uid* 와 *gid*로
   변경합니다. ID 중 하나를 변경하지 않으려면, 그것을 -1로 설정하십시
   오. "chown()"를 참조하십시오. 파이썬 3.3부터는, "os.chown(fd, uid,
   gid)"와 같습니다.

   "path", "uid", "gid", "dir_fd"를 인자로 감사 이벤트(auditing event)
   "os.chown"을 발생시킵니다.

   가용성: 유닉스.

os.fdatasync(fd)

   파일 기술자 *fd* 로 주어진 파일을 디스크에 쓰도록 강제합니다. 메타
   데이터를 갱신하도록 강제하지 않습니다.

   가용성: 유닉스.

   참고:

     이 함수는 MacOS에서는 사용할 수 없습니다.

os.fpathconf(fd, name)

   열린 파일과 관련된 시스템 구성 정보를 반환합니다. *name* 은 조회할
   구성 값을 지정합니다; 정의된 시스템 값의 이름인 문자열일 수 있습니
   다; 이 이름은 여러 표준(POSIX.1, 유닉스 95, 유닉스 98 및 기타)에서
   지정됩니다. 일부 플랫폼은 추가 이름도 정의합니다. 호스트 운영 체제
   에 알려진 이름은 "pathconf_names" 딕셔너리에서 제공됩니다. 이 매핑
   에 포함되지 않은 구성 변수의 경우, *name*에 정수를 전달하는 것도 허
   용됩니다.

   *name* 이 문자열이고 알 수 없으면, "ValueError"가 발생합니다.
   *name*에 대한 특정 값이 호스트 시스템에서 지원되지 않으면,
   "pathconf_names"에 포함되어 있어도, 에러 번호가 "errno.EINVAL"인
   "OSError"가 발생합니다.

   파이썬 3.3부터, "os.pathconf(fd, name)"과 같습니다.

   가용성: 유닉스.

os.fstat(fd)

   파일 기술자 *fd* 의 상태를 가져옵니다. "stat_result" 객체를 반환합
   니다.

   파이썬 3.3부터는, "os.stat(fd)"와 같습니다.

   더 보기: "stat()" 함수.

os.fstatvfs(fd)

   "statvfs()" 처럼, 파일 기술자 *fd* 와 연관된 파일을 포함하는 파일
   시스템에 대한 정보를 반환합니다. 파이썬 3.3부터는, "os.statvfs(fd)"
   와 같습니다.

   가용성: 유닉스.

os.fsync(fd)

   파일 기술자 *fd* 의 파일을 디스크에 쓰도록 강제합니다. 유닉스에서는
   , 네이티브 "fsync()" 함수를 호출합니다; 윈도우에서는, MS
   "_commit()" 함수.

   버퍼링 된 파이썬 *파일 객체* *f*로 시작하는 경우, *f* 와 연관된 모
   든 내부 버퍼가 디스크에 기록되게 하려면, 먼저 "f.flush()"를 수행한
   다음 "os.fsync(f.fileno())"를 하십시오.

   가용성: 유닉스, 윈도우.

os.ftruncate(fd, length)

   파일 기술자 *fd*에 해당하는 파일을 잘라내어 최대 *length* 바이트가
   되도록 만듭니다. 파이썬 3.3부터는, "os.truncate(fd, length)"와 같습
   니다.

   "fd", "length"를 인자로 감사 이벤트(auditing event) "os.truncate"를
   발생시킵니다.

   가용성: 유닉스, 윈도우.

   버전 3.5에서 변경: 윈도우 지원 추가

os.get_blocking(fd)

   파일 기술자의 블로킹 모드를 얻어옵니다: "O_NONBLOCK" 플래그가 설정
   되었으면 "False", 플래그가 지워졌으면 "True".

   "set_blocking()" 및 "socket.socket.setblocking()"도 참조하십시오.

   가용성: 유닉스.

   버전 3.5에 추가.

os.isatty(fd)

   파일 기술자 *fd* 가 열려 있고 tty(류의) 장치에 연결되어 있으면
   "True"를 반환하고, 그렇지 않으면 "False"를 반환합니다.

os.lockf(fd, cmd, len)

   열린 파일 기술자에 POSIX 록을 적용, 검사 또는 제거합니다. *fd* 는
   열린 파일 기술자입니다. *cmd* 는 사용할 명령을 지정합니다 -
   "F_LOCK", "F_TLOCK", "F_ULOCK" 또는 "F_TEST" 중 하나. *len* 은 잠글
   파일의 영역을 지정합니다.

   "fd", "cmd", "len"을 인자로 감사 이벤트(auditing event) "os.lockf"
   를 발생시킵니다.

   가용성: 유닉스.

   버전 3.3에 추가.

os.F_LOCK
os.F_TLOCK
os.F_ULOCK
os.F_TEST

   "lockf()"가 취할 조치를 지정하는 플래그.

   가용성: 유닉스.

   버전 3.3에 추가.

os.lseek(fd, pos, how)

   파일 기술자 *fd* 의 현재 위치를 *how* 에 따라 달리 해석되는 위치
   *pos*로 설정합니다: "SEEK_SET" 이나 "0" 이면 파일의 시작 부분을 기
   준으로 위치를 설정합니다; "SEEK_CUR"이나 "1" 이면 현재 위치를 기준
   으로 설정합니다; "SEEK_END" 나 "2" 면 파일의 끝을 기준으로 설정합니
   다. 새 커서 위치를 파일의 시작에서 따진 바이트로 반환합니다.

os.SEEK_SET
os.SEEK_CUR
os.SEEK_END

   "lseek()" 함수의 매개 변수. 값은 각각 0, 1, 2입니다.

   버전 3.3에 추가: 일부 운영 체제는 "os.SEEK_HOLE" 이나
   "os.SEEK_DATA"와 같은 추가 값을 지원할 수 있습니다.

os.open(path, flags, mode=0o777, *, dir_fd=None)

   파일 *path*를 열고 *flags* 에 따른 다양한 플래그와 때로 *mode* 따른
   모드를 설정합니다. *mode*를 계산할 때, 현재 umask 값으로 먼저 마스
   킹합니다. 새롭게 열린 파일의 파일 기술자를 돌려줍니다. 새 파일 기술
   자는 상속 불가능합니다.

   플래그와 모드 값에 대한 설명은, C 런타임 설명서를 참조하십시오; 플
   래그 상수("O_RDONLY" 와 "O_WRONLY"와 같은)는 "os" 모듈에 정의되어
   있습니다. 특히, 윈도우에서 바이너리 모드로 파일을 열려면 "O_BINARY"
   를 추가해야 합니다.

   이 함수는 *dir_fd* 매개 변수로 디렉터리 기술자에 상대적인 경로를 지
   원할 수 있습니다.

   "path", "mode", "flags"를 인자로 감사 이벤트(auditing event) "open"
   을 발생시킵니다.

   버전 3.4에서 변경: 새로운 파일 기술자는 이제 상속 불가능합니다.

   참고:

     이 함수는 저수준 I/O를 위한 것입니다. 일반적인 사용을 위해서는 내
     장 함수 "open()"을 사용하십시오, 이 함수는 "read()" 및 "write()"
     메서드(와 더 많은 메서드)가있는 *파일 객체*를 반환합니다. 파일 기
     술자를 파일 객체로 싸려면, "fdopen()"을 사용하십시오.

   버전 3.3에 추가: *dir_fd* 인자

   버전 3.5에서 변경: 시스템 호출이 인터럽트 되고 시그널 처리기가 예외
   를 발생시키지 않으면, 함수는 이제 "InterruptedError" 예외를 일으키
   는 대신 시스템 호출을 재시도합니다 (이유는 **PEP 475**를 참조하세요
   ).

   버전 3.6에서 변경: *경로류 객체*를 받아들입니다.

다음 상수는 "open()" 함수에 대한 *flags* 매개 변수의 옵션입니다. 비트
별 OR 연산자 "|"를 사용하여 결합할 수 있습니다. 일부는 모든 플랫폼에서
사용할 수는 없습니다. 가용성과 사용에 대한 설명은 유닉스의 *open(2)*
매뉴얼 페이지 또는 윈도우의 MSDN을 참조하십시오.

os.O_RDONLY
os.O_WRONLY
os.O_RDWR
os.O_APPEND
os.O_CREAT
os.O_EXCL
os.O_TRUNC

   위의 상수는 유닉스 및 윈도우에서 사용할 수 있습니다.

os.O_DSYNC
os.O_RSYNC
os.O_SYNC
os.O_NDELAY
os.O_NONBLOCK
os.O_NOCTTY
os.O_CLOEXEC

   위의 상수는 유닉스에서만 사용할 수 있습니다.

   버전 3.3에서 변경: "O_CLOEXEC" 상수를 추가합니다.

os.O_BINARY
os.O_NOINHERIT
os.O_SHORT_LIVED
os.O_TEMPORARY
os.O_RANDOM
os.O_SEQUENTIAL
os.O_TEXT

   위의 상수는 윈도우에서만 사용할 수 있습니다.

os.O_ASYNC
os.O_DIRECT
os.O_DIRECTORY
os.O_NOFOLLOW
os.O_NOATIME
os.O_PATH
os.O_TMPFILE
os.O_SHLOCK
os.O_EXLOCK

   위의 상수는 확장이며 C 라이브러리에서 정의하지 않으면 존재하지 않습
   니다.

   버전 3.4에서 변경: 지원하는 시스템에 "O_PATH"를 추가합니다. 리눅스
   커널 3.11 이상에서만 사용 가능한 "O_TMPFILE"를 추가합니다.

os.openpty()

   새로운 의사 터미널 쌍을 엽니다. 파일 기술자의 쌍 "(master, slave)"
   를 반환하는데, 각각 pty와 tty 입니다. 새 파일 기술자는 상속 불가능
   합니다. (약간) 더 이식성 있는 접근 방식을 사용하려면, "pty" 모듈을
   사용하십시오.

   가용성: 일부 유닉스.

   버전 3.4에서 변경: 새로운 파일 기술자는 이제 상속 불가능합니다.

os.pipe()

   파이프를 만듭니다. 파일 기술자 쌍 "(r, w)" 를 반환하는데, 각각 읽기
   와 쓰기에 사용할 수 있습니다. 새 파일 기술자는 상속 불가능합니다.

   가용성: 유닉스, 윈도우.

   버전 3.4에서 변경: 새로운 파일 기술자는 이제 상속 불가능합니다.

os.pipe2(flags)

   *flags* 가 원자적으로 설정된 파이프를 만듭니다. *flags* 는 다음과
   같은 값들을 하나 이상 OR 해서 만들 수 있습니다: "O_NONBLOCK",
   "O_CLOEXEC". 파일 기술자 쌍 "(r, w)" 를 반환하는데, 각각 읽기와 쓰
   기에 사용할 수 있습니다.

   가용성: 일부 유닉스.

   버전 3.3에 추가.

os.posix_fallocate(fd, offset, len)

   *fd*로 지정된 파일이 *offset* 에서 시작하여 *len* 바이트 동안 계속
   되도록 충분한 디스크 공간을 할당합니다.

   가용성: 유닉스.

   버전 3.3에 추가.

os.posix_fadvise(fd, offset, len, advice)

   특정 패턴으로 데이터에 액세스하려는 의도를 알려 커널이 최적화할 수
   있도록 합니다. 조언(advice)은 *fd에* 의해 지정된 파일의 *offset* 에
   서 시작하여 *len* 바이트 동안 계속되는 영역에 적용됩니다. *advice*
   는 "POSIX_FADV_NORMAL", "POSIX_FADV_SEQUENTIAL",
   "POSIX_FADV_RANDOM", "POSIX_FADV_NOREUSE", "POSIX_FADV_WILLNEED" 또
   는 "POSIX_FADV_DONTNEED" 중 하나입니다.

   가용성: 유닉스.

   버전 3.3에 추가.

os.POSIX_FADV_NORMAL
os.POSIX_FADV_SEQUENTIAL
os.POSIX_FADV_RANDOM
os.POSIX_FADV_NOREUSE
os.POSIX_FADV_WILLNEED
os.POSIX_FADV_DONTNEED

   사용 가능성이 큰 액세스 패턴을 지정하는 "posix_fadvise()"의
   *advice* 에 사용될 수 있는 플래그.

   가용성: 유닉스.

   버전 3.3에 추가.

os.pread(fd, n, offset)

   파일 기술자 *fd*에서 *offset* 의 위치부터 최대 *n* 바이트를 읽어 들
   이고, 파일 오프셋은 변경되지 않은 채로 남겨 둡니다.

   읽어 들인 바이트를 포함하는 바이트열을 돌려줍니다. *fd* 에 의해 참
   조된 파일의 끝에 도달하면, 빈 바이트열 객체가 반환됩니다.

   가용성: 유닉스.

   버전 3.3에 추가.

os.preadv(fd, buffers, offset, flags=0)

   파일 기술자 *fd*에서 *offset* 위치부터 가변 *바이트열류 객체들*
   *buffers* 로 읽어 들이고, 파일 오프셋은 변경되지 않은 채로 남겨 둡
   니다. 데이터가 가득 찰 때까지 각 버퍼로 데이터를 전송한 다음 나머지
   데이터를 보관하기 위해 시퀀스의 다음 버퍼로 이동합니다.

   flags 인자는 다음 플래그 중 0개 이상의 비트별 OR를 포함합니다:

   * "RWF_HIPRI"

   * "RWF_NOWAIT"

   실제로 읽힌 총 바이트 수를 반환합니다. 이 값은 모든 객체의 총 용량
   보다 작을 수 있습니다.

   운영 체제는 사용할 수 있는 버퍼 수에 한계("sysconf()" 값
   "'SC_IOV_MAX'")를 설정할 수 있습니다.

   "os.readv()" 와 "os.pread()"의 기능을 결합합니다.

   가용성: 리눅스 2.6.30 이상, FreeBSD 6.0 이상, OpenBSD 2.7 이상.
   flags를 사용하려면 리눅스 4.6 이상이 필요합니다.

   버전 3.7에 추가.

os.RWF_NOWAIT

   즉시 사용할 수 없는 데이터를 기다리지 않습니다. 이 플래그를 지정하
   면, 하부 저장 장치에서 데이터를 읽어야 하거나 록을 기다려야 할 때
   즉시 시스템 호출이 반환됩니다.

   일부 데이터가 성공적으로 읽히면, 읽은 바이트 수를 반환합니다. 읽은
   바이트가 없으면, "-1"을 반환하고 errno를 "errno.EAGAIN"로 설정합니
   다.

   가용성: 리눅스 4.14 이상.

   버전 3.7에 추가.

os.RWF_HIPRI

   우선순위가 높은 읽기/쓰기. 블록 기반 파일 시스템이 장치의 폴링을 사
   용할 수 있게 하여, 지연은 짧아 지지만, 추가 자원을 사용할 수 있습니
   다.

   현재, 리눅스에서, 이 기능은 "O_DIRECT" 플래그를 사용하여 열린 파일
   기술자에만 사용할 수 있습니다.

   가용성: 리눅스 4.6 이상.

   버전 3.7에 추가.

os.pwrite(fd, str, offset)

   파일 기술자 *fd*의 *offset* 위치에 *str* 바이트열을 쓰고, 파일 오프
   셋은 변경되지 않은 채로 남겨 둡니다.

   실제로 쓴 바이트 수를 반환합니다.

   가용성: 유닉스.

   버전 3.3에 추가.

os.pwritev(fd, buffers, offset, flags=0)

   *buffers* 내용을 파일 기술자 *fd*의 오프셋 *offset* 에 쓰고, 파일
   오프셋은 변경되지 않은 채로 남겨 둡니다. *buffers* 는 *바이트열류
   객체*의 시퀀스 여야 합니다. 버퍼는 배열 순서로 처리됩니다. 첫 번째
   버퍼의 전체 내용은 두 번째 버퍼로 진행하기 전에 기록되고, 같은 식으
   로 계속 진행합니다.

   flags 인자는 다음 플래그 중 0개 이상의 비트별 OR를 포함합니다:

   * "RWF_DSYNC"

   * "RWF_SYNC"

   실제로 쓴 총 바이트 수를 반환합니다.

   운영 체제는 사용할 수 있는 버퍼 수에 한계("sysconf()" 값
   "'SC_IOV_MAX'")를 설정할 수 있습니다.

   "os.writev()" 와 "os.pwrite()"의 기능을 결합합니다.

   가용성: 리눅스 2.6.30 이상, FreeBSD 6.0 이상, OpenBSD 2.7 이상.
   flags를 사용하려면 리눅스 4.7 이상이 필요합니다.

   버전 3.7에 추가.

os.RWF_DSYNC

   "O_DSYNC" "open(2)" 플래그의 쓰기마다 지정할 수 있는 버전을 제공합
   니다. 이 플래그 효과는 시스템 호출로 기록된 데이터 범위에만 적용됩
   니다.

   가용성: 리눅스 4.7 이상.

   버전 3.7에 추가.

os.RWF_SYNC

   "O_SYNC" "open(2)" 플래그의 쓰기마다 지정할 수 있는 버전을 제공합니
   다. 이 플래그 효과는 시스템 호출로 기록된 데이터 범위에만 적용됩니
   다.

   가용성: 리눅스 4.7 이상.

   버전 3.7에 추가.

os.read(fd, n)

   파일 기술자 *fd*에서 최대 *n* 바이트를 읽습니다.

   읽어 들인 바이트를 포함하는 바이트열을 돌려줍니다. *fd* 에 의해 참
   조된 파일의 끝에 도달하면, 빈 바이트열 객체가 반환됩니다.

   참고:

     이 함수는 저수준 I/O를 위한 것이며 "os.open()" 이나 "pipe()"에 의
     해 반환된 파일 기술자에 적용되어야 합니다. 내장 함수 "open()" 이
     나 "popen()" 또는 "fdopen()"에 의해 반환된 "파일 객체"나
     "sys.stdin"을 읽으려면, 그것의 "read()" 나 "readline()" 메서드를
     사용하십시오.

   버전 3.5에서 변경: 시스템 호출이 인터럽트 되고 시그널 처리기가 예외
   를 발생시키지 않으면, 함수는 이제 "InterruptedError" 예외를 일으키
   는 대신 시스템 호출을 재시도합니다 (이유는 **PEP 475**를 참조하세요
   ).

os.sendfile(out, in, offset, count)
os.sendfile(out, in, offset, count[, headers][, trailers], flags=0)

   파일 기술자 *in*에서 파일 기술자 *out* 으로 *offset*에서 시작하여
   *count* 바이트를 복사합니다. 전송된 바이트 수를 반환합니다. EOF에
   도달하면 0을 반환합니다.

   첫 번째 함수 서명은 "sendfile()"를 정의하는 모든 플랫폼에서 지원됩
   니다.

   리눅스에서, *offset*이 "None"으로 주어지면, *in*의 현재 위치에서 바
   이트를 읽고 *in*의 위치가 갱신됩니다.

   두 번째 경우는 맥 OS X와 FreeBSD 에 사용될 수 있는데, *headers* 와
   *trailers* 는 *in* 의 데이터가 기록되는 전후에 기록되는 버퍼의 임의
   의 시퀀스입니다. 첫 번째 경우와 같은 결과를 반환합니다.

   맥 OS X 및 FreeBSD 에서, *count* 의 값 0은 *in* 의 끝에 도달할 때까
   지 보내도록 지정합니다.

   모든 플랫폼은 *out* 파일 기술자로 소켓을 지원하고, 일부 플랫폼은 다
   른 유형(예를 들어 일반 파일, 파이프)들도 허락합니다.

   이기종 플랫폼 응용 프로그램은 *headers*, *trailers* 및 *flags* 인자
   를 사용해서는 안 됩니다.

   가용성: 유닉스.

   참고:

     "sendfile()"의 고수준 래퍼는, "socket.socket.sendfile()"을 보십시
     오.

   버전 3.3에 추가.

os.set_blocking(fd, blocking)

   지정된 파일 기술자의 블로킹 모드를 설정합니다. blocking이 "False"면
   "O_NONBLOCK" 플래그를 설정하고, 그렇지 않으면 플래그를 지웁니다.

   "get_blocking()"과 "socket.socket.setblocking()"도 참조하십시오.

   가용성: 유닉스.

   버전 3.5에 추가.

os.SF_NODISKIO
os.SF_MNOWAIT
os.SF_SYNC

   구현이 지원하는 경우, "sendfile()" 함수에 대한 매개 변수입니다.

   가용성: 유닉스.

   버전 3.3에 추가.

os.readv(fd, buffers)

   파일 기술자 *fd*에서 여러 가변 *바이트열류 객체* *buffers*로 읽어
   들입니다. 데이터가 가득 찰 때까지 각 버퍼로 데이터를 전송한 다음 나
   머지 데이터를 보관하기 위해 시퀀스의 다음 버퍼로 이동합니다.

   실제로 읽힌 총 바이트 수를 반환합니다. 이 값은 모든 객체의 총 용량
   보다 작을 수 있습니다.

   운영 체제는 사용할 수 있는 버퍼 수에 한계("sysconf()" 값
   "'SC_IOV_MAX'")를 설정할 수 있습니다.

   가용성: 유닉스.

   버전 3.3에 추가.

os.tcgetpgrp(fd)

   *fd*("os.open()"에 의해 반환된 것과 같은 열린 파일 기술자)에 의해
   주어진 터미널과 관련된 프로세스 그룹을 반환합니다.

   가용성: 유닉스.

os.tcsetpgrp(fd, pg)

   *fd*("os.open()"에 의해 반환된 것과 같은 열린 파일 기술자)에 의해
   주어진 터미널과 관련된 프로세스 그룹을 *pg*로 설정합니다.

   가용성: 유닉스.

os.ttyname(fd)

   파일 기술자 *fd*와 관련된 터미널 장치를 나타내는 문자열을 돌려줍니
   다. *fd* 가 터미널 장치와 연관되어 있지 않으면, 예외가 발생합니다.

   가용성: 유닉스.

os.write(fd, str)

   *str* 바이트열을 파일 기술자 *fd* 에 씁니다.

   실제로 쓴 바이트 수를 반환합니다.

   참고:

     이 함수는 저수준 I/O를 위한 것이며 "os.open()" 이나 "pipe()"에 의
     해 반환된 파일 기술자에 적용되어야 합니다. 내장 함수 "open()" 이
     나 "popen()" 또는 "fdopen()"에 의해 반환된 "파일 객체"나
     "sys.stdout" 또는 "sys.stderr"에 쓰려면, 그것의 "write()" 메서드
     를 사용하십시오.

   버전 3.5에서 변경: 시스템 호출이 인터럽트 되고 시그널 처리기가 예외
   를 발생시키지 않으면, 함수는 이제 "InterruptedError" 예외를 일으키
   는 대신 시스템 호출을 재시도합니다 (이유는 **PEP 475**를 참조하세요
   ).

os.writev(fd, buffers)

   *buffers* 내용을 파일 기술자 *fd*에 씁니다. *buffers* 는 *바이트열
   류 객체*의 시퀀스 여야 합니다. 버퍼는 배열 순서로 처리됩니다. 첫 번
   째 버퍼의 전체 내용은 두 번째 버퍼로 진행하기 전에 기록되고, 같은
   식으로 계속 진행합니다.

   실제로 쓴 총 바이트 수를 반환합니다.

   운영 체제는 사용할 수 있는 버퍼 수에 한계("sysconf()" 값
   "'SC_IOV_MAX'")를 설정할 수 있습니다.

   가용성: 유닉스.

   버전 3.3에 추가.


터미널의 크기 조회하기
----------------------

버전 3.3에 추가.

os.get_terminal_size(fd=STDOUT_FILENO)

   터미널 창의 크기를 "(columns, lines)" 로 반환하는데,
   "terminal_size" 형의 튜플입니다.

   선택적 인자 "fd"(기본값 "STDOUT_FILENO", 즉 표준 출력)는 조회할 파
   일 기술자를 지정합니다.

   파일 기술자가 터미널에 연결되어 있지 않으면, "OSError"가 발생합니다
   .

   "shutil.get_terminal_size()"가 일반적으로 사용해야 하는 고수준 함수
   이며, "os.get_terminal_size"는 저수준 구현입니다.

   가용성: 유닉스, 윈도우.

class os.terminal_size

   터미널 창 크기 "(columns, lines)"를 저장하는 튜플의 서브 클래스.

   columns

      문자 단위의 터미널 창의 너비.

   lines

      문자 단위의 터미널 창의 높이.


파일 기술자의 상속
------------------

버전 3.4에 추가.

파일 기술자는 자식 프로세스가 파일 기술자를 상속받을 수 있는지를 나타
내는 "상속 가능" 플래그를 가지고 있습니다. 파이썬 3.4부터, 파이썬에 의
해 생성된 파일 기술자는 기본적으로 상속 불가능합니다.

유닉스에서는, 상속 불가능한 파일 기술자는 새 프로그램 실행 시 자식 프
로세스에서 닫히고, 다른 파일 기술자는 상속됩니다.

윈도우에서는, 항상 상속되는 표준 스트림(파일 기술자 0, 1, 2: stdin,
stdout, stderr)을 제외하고, 상속 불가능한 핸들 및 파일 기술자는 자식
프로세스에서 닫힙니다. "spawn*" 함수를 사용하면, 상속 가능한 모든 핸들
과 상속 가능한 모든 파일 기술자가 상속됩니다. "subprocess" 모듈을 사용
하면, 표준 스트림을 제외한 모든 파일 기술자가 닫히고, 상속 가능한 핸들
은 *close_fds* 매개 변수가 "False" 일 때만 상속됩니다.

os.get_inheritable(fd)

   지정된 파일 기술자의 "상속 가능" 플래그를 가져옵니다 (논릿값).

os.set_inheritable(fd, inheritable)

   지정된 파일 기술자의 "상속 가능(inheritable)" 플래그를 설정합니다.

os.get_handle_inheritable(handle)

   지정된 핸들의 "상속 가능" 플래그를 가져옵니다 (논릿값).

   가용성: 윈도우.

os.set_handle_inheritable(handle, inheritable)

   지정된 핸들의 "상속 가능(inheritable)" 플래그를 설정합니다.

   가용성: 윈도우.


파일과 디렉터리
===============

일부 유닉스 플랫폼에서, 이 함수 중 많은 것들이 다음 기능 중 하나 이상
을 지원합니다:

* **파일 기술자 지정:** 일반적으로 "os" 모듈에 있는 함수에 제공되는
  *path* 인자는 파일 경로를 지정하는 문자열이어야 합니다. 하지만, 일부
  함수는 이제 *path* 인자로 열린 파일 기술자를 대신 받아들입니다. 그러
  면 그 함수는 기술자가 참조하는 파일에서 작동합니다. (POSIX 시스템에
  서, 파이썬은 함수의 "f" 접두어가 붙은 함수의 변종을 호출합니다 (예를
  들어, "chdir" 대신 "fchdir").)

  "os.supports_fd"를 사용하여, 여러분의 플랫폼에서 특정 함수에 파일 기
  술자로 *path*를 지정할 수 있는지를 확인할 수 있습니다. 사용할 수 없
  을 때, 사용하면 "NotImplementedError"를 발생시킵니다.

  함수가 *dir_fd* 나 *follow_symlinks* 인자도 지원하면, *path* 에 파일
  기술자를 제공할 때, 이 중 하나를 지정하는 것은 에러입니다.

* **디렉터리 기술자에 상대적인 경로:** *dir_fd* 가 "None"이 아니면, 디
  렉터리를 가리키는 파일 기술자여야 하며, 대상 경로는 상대 경로여야 합
  니다; 그러면 경로는 그 디렉터리에 상대적입니다. 절대 경로이면,
  *dir_fd* 는 무시됩니다. (POSIX 시스템에서, 파이썬은 "at" 접미사를 붙
  이거나 어쩌면 "f" 접두사도 붙인 함수의 변종을 호출합니다. 예를 들어,
  "access" 대신 "faccessat"를 호출합니다)

  "os.supports_dir_fd"를 사용하여, 여러분의 플랫폼에서 특정 함수에
  *dir_fd*가 지원되는지를 확인할 수 있습니다. 사용할 수 없을 때, 사용
  하면 "NotImplementedError"를 발생시킵니다.

* **심볼릭 링크를 따르지 않음:** *follow_symlinks* 가 "False"고, 대상
  경로의 마지막 요소가 심볼릭 링크면, 함수는 링크가 가리키는 파일 대신
  심볼릭 링크 자체에 대해 작동합니다. (POSIX 시스템에서, 파이썬은 함수
  의 "l..." 변종을 호출합니다.)

  "os.supports_follow_symlinks"를 사용하여, 여러분의 플랫폼에서 특정
  함수에 *follow_symlinks*가 지원되는지를 확인할 수 있습니다. 사용할
  수 없을 때, 사용하면 "NotImplementedError"를 발생시킵니다.

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

   실제(real) uid/gid를 사용해서 *path*를 액세스할 수 있는지 검사합니
   다. 대부분의 연산은 유효한(effective) uid/gid를 사용할 것이므로, 이
   함수는 suid/sgid 환경에서 호출하는 사용자가 지정된 *path* 에 대한
   액세스 권한이 있는지 검사하는데 사용할 수 있습니다. *path*가 존재하
   는지를 검사하려면 *mode* 는 "F_OK" 여야 하며, 권한을 검사하려면 하
   나 이상의 "R_OK", "W_OK" 및 "X_OK"를 OR 값일 수 있습니다. 액세스가
   허용되면 "True"를 반환하고, 그렇지 않으면 "False"를 반환합니다. 더
   자세한 정보는 유닉스 매뉴얼 페이지 *access(2)*를 참조하십시오.

   이 함수는 디렉터리 기술자에 상대적인 경로 와 심볼릭 링크를 따르지
   않음을 지원할 수 있습니다.

   *effective_ids* 가 "True"면, "access()"는 실제(real) uid/gid 대신
   유효한(effective) uid/gid를 사용하여 액세스 검사를 수행합니다.
   *effective_ids* 는 플랫폼에서 지원되지 않을 수 있습니다;
   "os.supports_effective_ids"를 사용하여, 사용할 수 있는지를 확인할
   수 있습니다. 사용할 수 없을 때, 사용하면 "NotImplementedError"를 발
   생시킵니다.

   참고:

     예를 들어, 실제로 "open()"를 사용하여 파일을 열기 전에,
     "access()"를 사용하여 파일을 여는 권한이 있는지 확인하는 것은 보
     안 구멍을 만듭니다. 사용자가 파일을 확인하고 조작을 위해 열기 사
     이의 짧은 시간 간격을 악용할 수 있기 때문입니다. *EAFP* 기법을 사
     용하는 것이 좋습니다. 예를 들면:

        if os.access("myfile", os.R_OK):
            with open("myfile") as fp:
                return fp.read()
        return "some default data"

     는 다음과 같이 쓰는 것이 더 좋습니다:

        try:
            fp = open("myfile")
        except PermissionError:
            return "some default data"
        else:
            with fp:
                return fp.read()

   참고:

     "access()"가 성공할 것임을 알릴 때도, I/O 연산이 실패할 수 있습니
     다. 특히 일반적인 POSIX 권한 비트 모델을 넘어서는 권한 의미가 있
     을 수 있는 네트워크 파일 시스템에 대한 연산에서 그럴 수 있습니다.

   버전 3.3에서 변경: *dir_fd*, *effective_ids* 및 *follow_symlinks*
   매개 변수를 추가했습니다.

   버전 3.6에서 변경: *경로류 객체*를 받아들입니다.

os.F_OK
os.R_OK
os.W_OK
os.X_OK

   *path* 의 존재 여부, 읽기 가능성, 쓰기 가능성 및 실행 가능성을 검사
   하기 위해, "access()"의 *mode* 매개 변수로 전달할 값입니다.

os.chdir(path)

   현재 작업 디렉터리를 *path*로 변경합니다.

   이 함수는 파일 기술자 지정을 지원할 수 있습니다. 기술자는 열려있는
   파일이 아니라, 열려있는 디렉터리를 참조해야 합니다.

   이 함수는 "OSError"와 "FileNotFoundError", "PermissionError" 및
   "NotADirectoryError"와 같은 서브 클래스를 발생시킬 수 있습니다.

   "path"를 인자로 감사 이벤트(auditing event) "os.chdir"을 발생시킵니
   다.

   버전 3.3에 추가: 일부 플랫폼에서 *path* 를 파일 기술자로 지정하는
   지원이 추가되었습니다.

   버전 3.6에서 변경: *경로류 객체*를 받아들입니다.

os.chflags(path, flags, *, follow_symlinks=True)

   *path* 의 플래그를 숫자 *flags*로 설정합니다. *flags*는 다음 값들
   ("stat" 모듈에 정의된 대로)의 조합(비트별 OR)을 취할 수 있습니다:

   * "stat.UF_NODUMP"

   * "stat.UF_IMMUTABLE"

   * "stat.UF_APPEND"

   * "stat.UF_OPAQUE"

   * "stat.UF_NOUNLINK"

   * "stat.UF_COMPRESSED"

   * "stat.UF_HIDDEN"

   * "stat.SF_ARCHIVED"

   * "stat.SF_IMMUTABLE"

   * "stat.SF_APPEND"

   * "stat.SF_NOUNLINK"

   * "stat.SF_SNAPSHOT"

   이 함수는 심볼릭 링크를 따르지 않음을 지원할 수 있습니다.

   "path", "flags"를 인자로 감사 이벤트(auditing event) "os.chflags"를
   발생시킵니다.

   가용성: 유닉스.

   버전 3.3에 추가: *follow_symlinks* 인자.

   버전 3.6에서 변경: *경로류 객체*를 받아들입니다.

os.chmod(path, mode, *, dir_fd=None, follow_symlinks=True)

   *path*의 모드를 숫자 *mode*로 변경합니다. *mode* 는 다음 값들
   ("stat" 모듈에 정의된 대로)이나 이들의 비트별 OR 조합을 취할 수 있
   습니다:

   * "stat.S_ISUID"

   * "stat.S_ISGID"

   * "stat.S_ENFMT"

   * "stat.S_ISVTX"

   * "stat.S_IREAD"

   * "stat.S_IWRITE"

   * "stat.S_IEXEC"

   * "stat.S_IRWXU"

   * "stat.S_IRUSR"

   * "stat.S_IWUSR"

   * "stat.S_IXUSR"

   * "stat.S_IRWXG"

   * "stat.S_IRGRP"

   * "stat.S_IWGRP"

   * "stat.S_IXGRP"

   * "stat.S_IRWXO"

   * "stat.S_IROTH"

   * "stat.S_IWOTH"

   * "stat.S_IXOTH"

   이 함수는 파일 기술자 지정, 디렉터리 기술자에 상대적인 경로 및 심볼
   릭 링크를 따르지 않음을 지원할 수 있습니다.

   참고:

     윈도우가 "chmod()"를 지원하더라도, ("stat.S_IWRITE" 와
     "stat.S_IREAD" 상수나 해당 정숫값을 통해) 파일의 읽기 전용 플래그
     만 설정할 수 있습니다. 다른 모든 비트는 무시됩니다.

   "path", "mode", "dir_fd"를 인자로 감사 이벤트(auditing event)
   "os.chmod"를 발생시킵니다.

   버전 3.3에 추가: *path*를 열린 파일 기술자로 지정하는 지원과
   *dir_fd* 및 *follow_symlinks* 인자가 추가되었습니다.

   버전 3.6에서 변경: *경로류 객체*를 받아들입니다.

os.chown(path, uid, gid, *, dir_fd=None, follow_symlinks=True)

   *path* 의 소유자와 그룹 ID를 숫자 *uid* 와 *gid*로 변경합니다. ID
   중 하나를 변경하지 않으려면, 그것을 -1로 설정하십시오.

   이 함수는 파일 기술자 지정, 디렉터리 기술자에 상대적인 경로 및 심볼
   릭 링크를 따르지 않음을 지원할 수 있습니다.

   숫자 ID 이외에 이름을 허용하는 고수준 함수는 "shutil.chown()"를 참
   조하십시오.

   "path", "uid", "gid", "dir_fd"를 인자로 감사 이벤트(auditing event)
   "os.chown"을 발생시킵니다.

   가용성: 유닉스.

   버전 3.3에 추가: *path*를 열린 파일 기술자로 지정하는 지원과
   *dir_fd* 및 *follow_symlinks* 인자가 추가되었습니다.

   버전 3.6에서 변경: *경로류 객체*를 지원합니다.

os.chroot(path)

   현재 프로세스의 루트 디렉터리를 *path*로 변경합니다.

   가용성: 유닉스.

   버전 3.6에서 변경: *경로류 객체*를 받아들입니다.

os.fchdir(fd)

   현재 작업 디렉터리를 파일 기술자 *fd*가 나타내는 디렉터리로 변경합
   니다. 기술자는 열려있는 파일이 아니라 열려있는 디렉터리를 참조해야
   합니다. 파이썬 3.3부터는, "os.chdir(fd)"와 같습니다.

   "path"를 인자로 감사 이벤트(auditing event) "os.chdir"을 발생시킵니
   다.

   가용성: 유닉스.

os.getcwd()

   현재 작업 디렉터리를 나타내는 문자열을 반환합니다.

os.getcwdb()

   현재 작업 디렉터리를 나타내는 바이트열을 반환합니다.

   버전 3.8에서 변경: 이 함수는 이제 윈도우에서 ANSI 코드 페이지가 아
   닌 UTF-8 인코딩을 사용합니다: 이유는 **PEP 529**를 참조하십시오. 이
   함수는 윈도우에서 더는 폐지되지 않습니다.

os.lchflags(path, flags)

   *path* 의 플래그를, "chflags()" 처럼, 숫자 *flags*로 설정하지만, 심
   볼릭 링크를 따르지 않습니다. 파이썬 3.3부터는, "os.chflags(path,
   flags, follow_symlinks=False)"와 같습니다.

   "path", "flags"를 인자로 감사 이벤트(auditing event) "os.chflags"를
   발생시킵니다.

   가용성: 유닉스.

   버전 3.6에서 변경: *경로류 객체*를 받아들입니다.

os.lchmod(path, mode)

   *path* 모드를 숫자 *mode*로 변경합니다. path가 심볼릭 링크면, 이 함
   수는 타깃이 아닌 심볼릭 링크에 영향을 미칩니다. *mode*의 가능한 값
   은 "chmod()" 문서를 참조하십시오. 파이썬 3.3부터는, "os.chmod(path,
   mode, follow_symlinks=False)"와 같습니다.

   "path", "mode", "dir_fd"를 인자로 감사 이벤트(auditing event)
   "os.chmod"를 발생시킵니다.

   가용성: 유닉스.

   버전 3.6에서 변경: *경로류 객체*를 받아들입니다.

os.lchown(path, uid, gid)

   *path* 의 소유자와 그룹 ID를 숫자 *uid* 와 *gid*로 변경합니다. 이
   함수는 심볼릭 링크를 따르지 않습니다. 파이썬 3.3부터는,
   "os.chown(path, uid, gid, follow_symlinks=False)"와 같습니다.

   "path", "uid", "gid", "dir_fd"를 인자로 감사 이벤트(auditing event)
   "os.chown"을 발생시킵니다.

   가용성: 유닉스.

   버전 3.6에서 변경: *경로류 객체*를 받아들입니다.

os.link(src, dst, *, src_dir_fd=None, dst_dir_fd=None, follow_symlinks=True)

   *src*를 가리키는 *dst* 라는 이름의 하드 링크를 만듭니다.

   이 함수는 디렉터리 기술자에 상대적인 경로를 제공하기 위해
   *src_dir_fd* 와/나 *dst_dir_fd* 를 지정하는 것과, 심볼릭 링크를 따
   르지 않음을 지원할 수 있습니다.

   "src", "dst", "src_dir_fd", "dst_dir_fd"를 인자로 감사 이벤트
   (auditing event) "os.link"를 발생시킵니다.

   가용성: 유닉스, 윈도우.

   버전 3.2에서 변경: 윈도우 지원이 추가되었습니다.

   버전 3.3에 추가: *src_dir_fd* , *dst_dir_fd* 및 *follow_symlinks*
   인자를 추가했습니다.

   버전 3.6에서 변경: *src* 및 *dst*로 *경로류 객체*를 받아들입니다.

os.listdir(path='.')

   *path*에 의해 주어진 디렉터리에 있는 항목들의 이름을 담고 있는 리스
   트를 반환합니다. 리스트는 임의의 순서로 나열되며, 디렉터리에 존재하
   더라도 특수 항목 "'.'" 과 "'..'"는 포함하지 않습니다. 이 함수 호출
   중에 디렉터리에서 파일이 제거되거나 추가되면, 해당 파일의 이름이 포
   함되는지는 지정되지 않습니다.

   *path*는 *경로류 객체* 일 수 있습니다. *path* 가 "bytes" 형이면 (직
   접 또는 "PathLike" 인터페이스를 통해 간접적으로), 반환되는 파일명도
   "bytes" 형입니다; 다른 모든 상황에서는 형 "str"이 됩니다.

   이 함수는 또한 파일 기술자 지정을 지원할 수 있습니다; 파일 기술자는
   디렉터리를 참조해야 합니다.

   "path"를 인자로 감사 이벤트(auditing event) "os.listdir"을 발생시킵
   니다.

   참고:

     "str" 파일명을 "bytes"로 인코딩하려면, "fsencode()"를 사용하십시
     오.

   더 보기:

     "scandir()" 함수는 파일 어트리뷰트 정보와 함께 디렉터리 항목을 반
     환하므로, 많은 일반적인 사용 사례에서 더 나은 성능을 제공합니다.

   버전 3.2에서 변경: *path* 매개 변수는 선택 사항이 되었습니다.

   버전 3.3에 추가: *path*에 열린 파일 기술자를 지정하는 지원이 추가되
   었습니다.

   버전 3.6에서 변경: *경로류 객체*를 받아들입니다.

os.lstat(path, *, dir_fd=None)

   주어진 경로에 대해 "lstat()" 시스템 호출과 동등한 작업을 수행합니다
   . "stat()"와 유사하지만, 심볼릭 링크를 따르지 않습니다.
   "stat_result" 객체를 반환합니다.

   심볼릭 링크를 지원하지 않는 플랫폼에서, 이 함수는 "stat()"의 별칭입
   니다.

   파이썬 3.3부터는, "os.stat(path, dir_fd=dir_fd,
   follow_symlinks=False)"와 같습니다.

   이 기능은 디렉터리 기술자에 상대적인 경로도 지원할 수 있습니다.

   더 보기: "stat()" 함수.

   버전 3.2에서 변경: 윈도우 6.0 (Vista) 심볼릭 링크에 대한 지원이 추
   가되었습니다.

   버전 3.3에서 변경: *dir_fd* 매개 변수가 추가되었습니다.

   버전 3.6에서 변경: *경로류 객체*를 받아들입니다.

   버전 3.8에서 변경: 윈도우에서, 이제 심볼릭 링크와 디렉터리 정션
   (directory junction)을 포함하는 다른 경로를 나타내는 재해석 지점
   (reparse point, 이름 서로게이트)을 엽니다. 다른 유형의 재해석 지점
   은 운영 체제에서 "stat()"에서 처럼 결정됩니다.

os.mkdir(path, mode=0o777, *, dir_fd=None)

   숫자 모드 *mode*로 *path* 라는 디렉터리를 만듭니다.

   디렉터리가 이미 존재하면, "FileExistsError"가 발생합니다.

   일부 시스템에서는, *mode*가 무시됩니다. 모드가 사용될 때, 현재
   umask 값으로 먼저 마스킹합니다. 마지막 9비트 (즉, *mode* 의 8진 표
   현의 마지막 3자리 수) 이외의 비트가 설정되면, 그 의미는 플랫폼에 따
   라 다릅니다. 일부 플랫폼에서는, 이것들이 무시되며, 설정하려면 명시
   적으로 "chmod()"를 호출해야 합니다.

   On Windows, a *mode* of "0o700" is specifically handled to apply
   access control to the new directory such that only the current user
   and administrators have access. Other values of *mode* are ignored.

   이 기능은 디렉터리 기술자에 상대적인 경로도 지원할 수 있습니다.

   임시 디렉터리를 만들 수도 있습니다; "tempfile" 모듈의
   "tempfile.mkdtemp()" 함수를 참조하십시오.

   "path", "mode", "dir_fd"를 인자로 감사 이벤트(auditing event)
   "os.mkdir"을 발생시킵니다.

   버전 3.3에 추가: *dir_fd* 인자

   버전 3.6에서 변경: *경로류 객체*를 받아들입니다.

   버전 3.8.20에서 변경: Windows now handles a *mode* of "0o700".

os.makedirs(name, mode=0o777, exist_ok=False)

   재귀적 디렉터리 생성 함수. "mkdir()"와 비슷하지만, 말단 디렉터리를
   포함하는 데 필요한 모든 중간 수준 디렉터리들을 만듭니다.

   *mode* 매개 변수는 말단 디렉터리를 만들기 위해 "mkdir()"로 전달됩니
   다; 이것이 어떻게 해석되는지는 mkdir() 설명을 보십시오. 새로 만들어
   지는 부모 디렉터리들의 파일 권한 비트를 설정하려면, "makedirs()"를
   호출하기 전에 umask를 설정할 수 있습니다. 이미 존재하는 부모 디렉터
   리의 파일 권한 비트는 변경되지 않습니다.

   *exist_ok* 가 "False"(기본값)면, 대상 디렉터리가 이미 있을 때
   "FileExistsError"가 발생합니다.

   참고:

     "makedirs()"는 생성할 경로 요소에 "pardir"(예를 들어, 유닉스 시스
     템의 경우 "..")이 포함되어 있으면 혼란해 할 수 있습니다.

   이 함수는 UNC 경로를 올바르게 처리합니다.

   "path", "mode", "dir_fd"를 인자로 감사 이벤트(auditing event)
   "os.mkdir"을 발생시킵니다.

   버전 3.2에 추가: *exist_ok* 매개 변수.

   버전 3.4.1에서 변경: 파이썬 3.4.1 이전에는, *exist_ok* 가 "True"이
   고 디렉터리가 존재한다면, *mode* 가 기존 디렉터리의 모드와 일치하지
   않을 때, "makedirs()"는 여전히 에러를 발생시킵니다. 이 동작은 안전
   하게 구현할 수 없으므로, 파이썬 3.4.1에서 제거되었습니다. bpo-21082
   를 참조하십시오.

   버전 3.6에서 변경: *경로류 객체*를 받아들입니다.

   버전 3.7에서 변경: *mode* 인자는 더는 새로 만들어지는 중간 수준 디
   렉터리의 파일 권한 비트에 영향을 주지 않습니다.

os.mkfifo(path, mode=0o666, *, dir_fd=None)

   숫자 모드 *mode*로 *path* 라는 이름의 FIFO(이름있는 파이프)를 만듭
   니다. 현재 umask 값으로 먼저 모드를 마스킹합니다.

   이 기능은 디렉터리 기술자에 상대적인 경로도 지원할 수 있습니다.

   FIFO는 일반 파일처럼 액세스할 수 있는 파이프입니다. FIFO는 삭제될
   때까지 존재합니다 (예를 들어 "os.unlink()"로). 일반적으로, FIFO는 "
   클라이언트"와 "서버" 유형 프로세스 사이에서 랑데부로 사용됩니다: 서
   버는 FIFO를 읽기 용도로 열고, 클라이언트는 쓰기 용도로 엽니다.
   "mkfifo()"가 FIFO를 열지는 않는다는 점에 유의하십시오 --- 단지 랑데
   부 포인트를 생성합니다.

   가용성: 유닉스.

   버전 3.3에 추가: *dir_fd* 인자

   버전 3.6에서 변경: *경로류 객체*를 받아들입니다.

os.mknod(path, mode=0o600, device=0, *, dir_fd=None)

   *path* 라는 이름의 파일 시스템 노드(파일, 장치 특수 파일 또는 이름
   있는 파이프)를 만듭니다. *mode* 는 사용 권한과 생성될 노드의 유형을
   모두 지정하며, "stat.S_IFREG", "stat.S_IFCHR", "stat.S_IFBLK" 및
   "stat.S_IFIFO" 중 하나와 결합(비트별 OR)합니다 (이 상수들은 "stat"
   에 있습니다). "stat.S_IFCHR"와 "stat.S_IFBLK"의 경우, *device* 는
   새로 만들어지는 장치 특수 파일(아마도 "os.makedev()"를 사용해서)을
   정의합니다, 그렇지 않으면 무시됩니다.

   이 기능은 디렉터리 기술자에 상대적인 경로도 지원할 수 있습니다.

   가용성: 유닉스.

   버전 3.3에 추가: *dir_fd* 인자

   버전 3.6에서 변경: *경로류 객체*를 받아들입니다.

os.major(device)

   원시 장치 번호(보통 "stat"의 "st_dev" 이나 "st_rdev" 어트리뷰트)에
   서 장치 주 번호를 추출합니다.

os.minor(device)

   원시 장치 번호(보통 "stat"의 "st_dev" 이나 "st_rdev" 어트리뷰트)에
   서 장치 부 번호를 추출합니다.

os.makedev(major, minor)

   주 장치 번호와 부 장치 번호로 원시 장치 번호를 조립합니다.

os.pathconf(path, name)

   이름있는 파일과 관련된 시스템 구성 정보를 반환합니다. *name* 은 조
   회할 구성 값을 지정합니다; 정의된 시스템 값의 이름인 문자열일 수 있
   습니다; 이 이름은 여러 표준(POSIX.1, 유닉스 95, 유닉스 98 및 기타)
   에서 지정됩니다. 일부 플랫폼은 추가적인 이름도 정의합니다. 호스트
   운영 체제에 알려진 이름은 "pathconf_names" 딕셔너리에서 제공됩니다.
   이 매핑에 포함되지 않은 구성 변수를 위해, *name*에 정수를 전달하는
   것도 허용됩니다.

   *name* 이 문자열이고 알 수 없으면, "ValueError"가 발생합니다.
   *name*에 대한 특정 값이 호스트 시스템에서 지원되지 않으면,
   "pathconf_names"에 포함되어 있어도, 에러 번호가 "errno.EINVAL"인
   "OSError"가 발생합니다.

   이 함수는 파일 기술자 지정을 지원할 수 있습니다.

   가용성: 유닉스.

   버전 3.6에서 변경: *경로류 객체*를 받아들입니다.

os.pathconf_names

   "pathconf()"와 "fpathconf()"가 받아들이는 이름을 호스트 운영 체제에
   서 해당 이름에 대해 정의된 정숫값으로 매핑하는 딕셔너리. 이것은 시
   스템에 알려진 이름 집합을 판별하는 데 사용될 수 있습니다.

   가용성: 유닉스.

os.readlink(path, *, dir_fd=None)

   심볼릭 링크가 가리키는 경로를 나타내는 문자열을 반환합니다. 결과는
   절대 또는 상대 경로명일 수 있습니다; 상대 경로이면
   "os.path.join(os.path.dirname(path), result)"를 사용하여 절대 경로
   명으로 변환할 수 있습니다.

   *path* 가 (직접 또는 "PathLike" 인터페이스를 통해 간접적으로) 문자
   열 객체면, 결과도 문자열 객체가 되고, 호출은 UnicodeDecodeError를
   발생시킬 수 있습니다. *path* 가 (직접 또는 간접적으로) 바이트열 객
   체면, 결과는 바이트열 객체가 됩니다.

   이 기능은 디렉터리 기술자에 상대적인 경로도 지원할 수 있습니다.

   링크를 포함할 수 있는 경로를 결정(resolve)하려고 할 때,
   "realpath()"를 사용하여 재귀와 플랫폼 차이를 올바르게 처리하십시오.

   가용성: 유닉스, 윈도우.

   버전 3.2에서 변경: 윈도우 6.0 (Vista) 심볼릭 링크에 대한 지원이 추
   가되었습니다.

   버전 3.3에 추가: *dir_fd* 인자

   버전 3.6에서 변경: 유닉스에서 *경로류 객체*를 받아들입니다.

   버전 3.8에서 변경: 윈도우에서 *경로류 객체*와 바이트열 객체를 받아
   들입니다.

   버전 3.8에서 변경: 디렉터리 정션(directory junction)에 대한 지원이
   추가되었고, 이전에 반환되던 선택적 "print name" 필드 대신 치환 경로
   (일반적으로 "\\?\" 접두사를 포함합니다)를 반환하도록 변경되었습니다
   .

os.remove(path, *, dir_fd=None)

   Remove (delete) the file *path*.  If *path* is a directory, an
   "IsADirectoryError" is raised.  Use "rmdir()" to remove
   directories. If the file does not exist, a "FileNotFoundError" is
   raised.

   이 함수는 디렉터리 기술자에 상대적인 경로를 지원할 수 있습니다.

   윈도우에서, 사용 중인 파일을 제거하려고 시도하면 예외가 발생합니다;
   유닉스에서는 디렉터리 항목이 제거되지만, 원본 파일이 더는 사용되지
   않을 때까지 파일에 할당된 저장 공간을 사용할 수 없습니다.

   이 함수는 의미 적으로 "unlink()"와 같습니다.

   "path", "dir_fd"를 인자로 감사 이벤트(auditing event) "os.remove"를
   발생시킵니다.

   버전 3.3에 추가: *dir_fd* 인자

   버전 3.6에서 변경: *경로류 객체*를 받아들입니다.

os.removedirs(name)

   재귀적으로 디렉터리를 제거합니다. "rmdir()" 처럼 동작하는데 다음과
   같은 차이가 있습니다. 말단 디렉터리가 성공적으로 제거되면,
   "removedirs()"는 에러가 발생할 때까지 *path*에 언급된 모든 상위 디
   렉터리를 연속적으로 제거하려고 합니다 (에러는 무시되는데, 이는 일반
   적으로 부모 디렉터리가 비어 있음을 뜻하기 때문입니다). 예를 들어,
   "os.removedirs('foo/bar/baz')"는 먼저 "'foo/bar/baz'" 디렉터리를 제
   거한 다음, "'foo/bar'" 및 "'foo'"가 비어 있으면 제거합니다. 말단 디
   렉터리를 성공적으로 제거할 수 없으면, "OSError"를 발생시킵니다.

   "path", "dir_fd"를 인자로 감사 이벤트(auditing event) "os.remove"를
   발생시킵니다.

   버전 3.6에서 변경: *경로류 객체*를 받아들입니다.

os.rename(src, dst, *, src_dir_fd=None, dst_dir_fd=None)

   파일 또는 디렉터리 *src*의 이름을 *dst*로 바꿉니다. *dst*가 존재하
   면, 많은 경우에 "OSError" 서브 클래스로 연산이 실패합니다:

   윈도우에서, *dst*가 존재하면 항상 "FileExistsError"가 발생합니다.

   유닉스에서, *src*가 파일이고 *dst*가 디렉터리이거나 그 반대면,
   "IsADirectoryError"나 "NotADirectoryError"가 각각 발생합니다. 둘 다
   디렉터리이고 *dst*가 비어 있으면, *dst*는 조용히 대체됩니다. *dst*
   가 비어 있지 않은 디렉터리면, "OSError"가 발생합니다. 둘 다 파일이
   면, *dst*는 사용자에게 권한이 있을 때 자동으로 대체됩니다. *src* 와
   *dst* 가 다른 파일 시스템에 있을 때, 일부 유닉스 환경에서 작업이 실
   패할 수 있습니다. 성공하면, 이름 바꾸기는 원자적 연산이 됩니다 (이
   것은 POSIX 요구 사항입니다).

   이 함수는 디렉터리 기술자에 상대적인 경로를 제공하도록 *src_dir_fd*
   와/나 *dst_dir_fd* 를 지정하는 것을 지원할 수 있습니다.

   플랫폼에 무관하게 대상을 덮어쓰길 원하면, "replace()"를 사용하십시
   오.

   "src", "dst", "src_dir_fd", "dst_dir_fd"를 인자로 감사 이벤트
   (auditing event) "os.rename"을 발생시킵니다.

   버전 3.3에 추가: *src_dir_fd* 및 *dst_dir_fd* 인자

   버전 3.6에서 변경: *src* 및 *dst*로 *경로류 객체*를 받아들입니다.

os.renames(old, new)

   재귀적 디렉터리 또는 파일 이름 바꾸기 함수. "rename()"처럼 작동하지
   만, 새 경로명이 유효하도록 만들기 위해 먼저 필요한 중간 디렉터리를
   만드는 점이 다릅니다. 이름을 변경한 후에는, 이전 이름의 가장 오른쪽
   경로 세그먼트에 해당하는 디렉터리를 "removedirs()"를 사용하여 제거
   합니다.

   참고:

     이 함수는 말단 디렉터리나 파일을 제거하는 데 필요한 권한이 없을
     때, 새 디렉터리 구조를 만든 상태에서 실패할 수 있습니다.

   "src", "dst", "src_dir_fd", "dst_dir_fd"를 인자로 감사 이벤트
   (auditing event) "os.rename"을 발생시킵니다.

   버전 3.6에서 변경: *old* 와 *new* 에 *경로류 객체*를 받아들입니다.

os.replace(src, dst, *, src_dir_fd=None, dst_dir_fd=None)

   파일 또는 디렉터리 *src*의 이름을 *dst*로 바꿉니다. *dst* 가 디렉터
   리면, "OSError"가 발생합니다. *dst* 가 존재하고 파일이면, 사용자에
   게 권한이 있을 때 자동으로 대체됩니다. *src* 와 *dst* 가 다른 파일
   시스템에 있으면, 작업이 실패할 수 있습니다. 성공하면, 이름 바꾸기는
   원자적 연산이 됩니다 (이것은 POSIX 요구 사항입니다).

   이 함수는 디렉터리 기술자에 상대적인 경로를 제공하도록 *src_dir_fd*
   와/나 *dst_dir_fd* 를 지정하는 것을 지원할 수 있습니다.

   "src", "dst", "src_dir_fd", "dst_dir_fd"를 인자로 감사 이벤트
   (auditing event) "os.rename"을 발생시킵니다.

   버전 3.3에 추가.

   버전 3.6에서 변경: *src* 및 *dst*로 *경로류 객체*를 받아들입니다.

os.rmdir(path, *, dir_fd=None)

   디렉터리 *path*를 제거(삭제)합니다. 디렉터리가 존재하지 않거나 비어
   있지 않으면, "FileNotFoundError"나 "OSError"가 각각 발생합니다. 전
   체 디렉터리 트리를 제거하려면, "shutil.rmtree()"를 사용할 수 있습니
   다.

   이 함수는 디렉터리 기술자에 상대적인 경로를 지원할 수 있습니다.

   "path", "dir_fd"를 인자로 감사 이벤트(auditing event) "os.rmdir"을
   발생시킵니다.

   버전 3.3에 추가: *dir_fd* 매개 변수

   버전 3.6에서 변경: *경로류 객체*를 받아들입니다.

os.scandir(path='.')

   *path*로 지정된 디렉터리 내의 항목에 대응하는 "os.DirEntry" 객체의
   이터레이터를 돌려줍니다. 항목은 임의의 순서로 제공되며, 특수 항목
   "'.'" 및 "'..'"는 포함되지 않습니다. 이터레이터를 만든 후에 디렉터
   리에서 파일이 제거되거나 추가되면, 해당 파일의 항목이 포함되는지는
   지정되지 않습니다.

   "listdir()" 대신 "scandir()"를 사용하면, 디렉터리를 검색할 때 운영
   체제가 제공한다면 "os.DirEntry" 객체가 파일 유형과 파일 어트리뷰트
   정보를 제공하기 때문에, 이것들이 필요한 코드의 성능을 크게 개선할
   수 있습니다. 모든 "os.DirEntry" 메서드가 시스템 호출을 수행할 수 있
   지만, 일반적으로 "is_dir()" 및 "is_file()"는 심볼릭 링크에 대해서만
   시스템 호출을 요구합니다; "os.DirEntry.stat()"는 유닉스에서 항상 시
   스템 호출을 요구하지만 윈도우에서는 심볼릭 링크에 대해서만 시스템
   호출을 요구합니다.

   *path* 는 *경로류 객체* 일 수 있습니다. *path* 가 (직접 또는
   "PathLike" 인터페이스를 통해 간접적으로) "bytes" 형이면, 각
   "os.DirEntry"의 "name" 및 "path" 어트리뷰트의 형은 "bytes"입니다.
   다른 모든 상황에서는 형 "str"이 됩니다.

   이 함수는 또한 파일 기술자 지정을 지원할 수 있습니다; 파일 기술자는
   디렉터리를 참조해야 합니다.

   "path"를 인자로 감사 이벤트(auditing event) "os.scandir"을 발생시킵
   니다.

   "scandir()" 이터레이터는 *컨텍스트 관리자* 프로토콜을 지원하고 다음
   과 같은 메서드를 제공합니다:

   scandir.close()

      이터레이터를 닫고 확보한 자원을 반납합니다.

      이터레이터가 소진되거나 가비지 수집될 때 또는 이터레이션 중에 에
      러가 발생하면 자동으로 호출됩니다. 하지만 명시적으로 호출하거나
      "with" 문을 사용하는 것이 좋습니다.

      버전 3.6에 추가.

   다음 예제는 주어진 *path*의 "'.'"로 시작하지 않는 모든 파일(디렉터
   리 제외)을 표시하기 위한 "scandir()"의 간단한 사용을 보여줍니다.
   "entry.is_file()" 호출은 일반적으로 추가 시스템 호출을 하지 않습니
   다:

      with os.scandir(path) as it:
          for entry in it:
              if not entry.name.startswith('.') and entry.is_file():
                  print(entry.name)

   참고:

     유닉스 기반 시스템에서, "scandir()"은 시스템의 opendir() 과
     readdir() 함수를 사용합니다. 윈도우에서는, Win32 FindFirstFileW
     와 FindNextFileW 함수를 사용합니다.

   버전 3.5에 추가.

   버전 3.6에 추가: *컨텍스트 관리자* 프로토콜과 "close()" 메서드 대한
   지원이 추가되었습니다. "scandir()" 이터레이터가 모두 소진되거나 명
   시적으로 닫히지 않으면 "ResourceWarning"가 파괴자에서 방출됩니다.이
   함수는 *경로류 객체*를 받아들입니다.

   버전 3.7에서 변경: 유닉스에서 파일 기술자에 대한 지원이 추가되었습
   니다.

class os.DirEntry

   디렉터리 항목의 파일 경로와 다른 파일 어트리뷰트를 노출하기 위해
   "scandir()"에 의해 산출되는 객체.

   "scandir()"는 추가 시스템 호출 없이 가능한 많은 정보를 제공합니다.
   "stat()" 또는 "lstat()" 시스템 호출이 이루어지면, "os.DirEntry" 객
   체는 결과를 캐시 합니다.

   "os.DirEntry" 인스턴스는 수명이 긴 데이터 구조에 저장하는 용도가 아
   닙니다; 파일 메타 데이터가 변경되었거나 "scandir()"를 호출한 후 오
   랜 시간이 지났음을 안다면, "os.stat(entry.path)"를 호출하여 최신 정
   보를 가져오십시오.

   "os.DirEntry" 메서드는 운영 체제 시스템 호출을 할 수 있으므로,
   "OSError"를 일으킬 수도 있습니다. 에러에 대해 매우 세부적인 제어가
   필요하면, "os.DirEntry" 메서드 중 하나를 호출할 때 "OSError"를 잡은
   후 적절하게 처리할 수 있습니다.

   *경로류 객체*로 직접 사용할 수 있도록, "os.DirEntry"는 "PathLike"
   인터페이스를 구현합니다.

   "os.DirEntry" 인스턴스의 어트리뷰트 및 메서드는 다음과 같습니다:

   name

      "scandir()" *path* 인자에 상대적인, 항목의 기본(base) 파일명.

      "name" 어트리뷰트는 "scandir()" *path* 인자가 "bytes" 형이면
      "bytes" 고, 그렇지 않으면 "str" 입니다. 바이트열 파일명을 디코딩
      하려면 "fsdecode()"를 사용하십시오.

   path

      항목의 전체 경로명: "os.path.join(scandir_path, entry.name)"과
      같습니다. 여기서 *scandir_path* 는 "scandir()" *path* 인자입니다
      . 경로는 "scandir()" *path* 인자가 절대 경로일 때만 절대 경로입
      니다. "scandir()" *path* 인자가 파일 기술자면, "path" 어트리뷰트
      는 "name" 어트리뷰트와 같습니다.

      "path" 어트리뷰트는 "scandir()" *path* 인자가 "bytes" 형이면
      "bytes"고, 그렇지 않으면 "str" 입니다. 바이트열 파일명을 디코딩
      하려면 "fsdecode()"를 사용하십시오.

   inode()

      항목의 아이노드(inode) 번호를 반환합니다.

      결과는 "os.DirEntry" 객체에 캐시 됩니다. 최신 정보를 가져오려면
      "os.stat(entry.path, follow_symlinks=False).st_ino"를 사용하십시
      오.

      최초의 캐시 되지 않은 호출에서, 윈도우 에서는 시스템 호출이 필요
      하지만, 유닉스에서는 그렇지 않습니다.

   is_dir(*, follow_symlinks=True)

      이 항목이 디렉터리 또는 디렉터리를 가리키는 심볼릭 링크면 "True"
      를 반환합니다; 항목이 다른 종류의 파일이거나 다른 종류의 파일을
      가리키면, 또는 더는 존재하지 않으면 "False"를 반환합니다.

      *follow_symlinks* 가 "False"면, 이 항목이 디렉터리일 때만 (심볼
      릭 링크를 따르지 않고) "True"를 반환합니다; 항목이 다른 종류의
      파일이거나 더는 존재하지 않으면 "False"를 반환합니다.

      결과는 *follow_symlinks* 가 "True" 및 "False"일 때에 대해 별도로
      "os.DirEntry" 객체에 캐시 됩니다. 최신 정보를 가져오려면,
      "stat.S_ISDIR()"로 "os.stat()"을 호출하십시오.

      최초의 캐시 되지 않은 호출에서, 대부분 시스템 호출이 필요하지 않
      습니다. 특히, 심볼릭 링크가 아니면, 윈도우나 유닉스 모두 시스템
      호출이 필요하지 않은데, 네트워크 파일 시스템과 같이
      "dirent.d_type == DT_UNKNOWN"를 반환하는 특정 유닉스 파일 시스템
      은 예외입니다. 항목이 심볼릭 링크면, *follow_symlinks* 가
      "False"가 아닌 이상, 심볼릭 링크를 따르기 위해 시스템 호출이 필
      요합니다.

      이 메서드는, "PermissionError"와 같은, "OSError"를 발생시킬 수
      있지만, "FileNotFoundError"는 잡혀서 발생하지 않습니다.

   is_file(*, follow_symlinks=True)

      이 항목이 파일이나 파일을 가리키는 심볼릭 링크면 "True"를 반환합
      니다; 항목이 디렉터리 또는 다른 비 파일 항목이거나, 그런 것을 가
      리키거나, 더는 존재하지 않으면 "False"를 반환합니다.

      *follow_symlinks* 가 "False"면, 이 항목이 파일일 때만 (심볼릭 링
      크를 따르지 않고) "True"를 반환합니다; 항목이 디렉터리 나 다른
      비 파일 항목이거나 더는 존재하지 않으면 "False"를 반환합니다.

      결과는 "os.DirEntry" 객체에 캐시 됩니다. 캐싱, 시스템 호출, 예외
      발생은 "is_dir()"과 같습니다.

   is_symlink()

      이 항목이 심볼릭 링크면 (망가졌다 하더라도) "True"를 반환합니다;
      항목이 디렉터리 나 어떤 종류의 파일이거나 더는 존재하지 않으면
      "False"를 반환합니다.

      결과는 "os.DirEntry" 객체에 캐시 됩니다. 최신 정보를 가져오려면
      "os.path.islink()"를 호출하십시오.

      첫 번째, 캐시 되지 않은 호출에서는 시스템 호출이 필요하지 않습니
      다. 특히 윈도우 나 유닉스는 "dirent.d_type == DT_UNKNOWN"를 반환
      하는 특정 유닉스 파일 시스템 (예 : 네트워크 파일 시스템)을 제외
      하고는 시스템 호출이 필요하지 않습니다.

      이 메서드는, "PermissionError"와 같은, "OSError"를 발생시킬 수
      있지만, "FileNotFoundError"는 잡혀서 발생하지 않습니다.

   stat(*, follow_symlinks=True)

      이 항목의 "stat_result" 객체를 돌려줍니다. 이 메서드는 기본적으
      로 심볼릭 링크를 따릅니다; 심볼릭 링크를 stat 하려면,
      "follow_symlinks=False" 인자를 추가하십시오.

      유닉스에서, 이 메서드는 항상 시스템 호출을 요구합니다. 윈도우에
      서, *follow_symlinks* 가 "True"이고 항목이 재해석 지점(reparse
      point, 예를 들어, 심볼릭 링크나 디렉터리 정션(directory
      junction))일 때만 시스템 호출이 필요합니다.

      윈도우에서, "stat_result"의 "st_ino", "st_dev" 및 "st_nlink" 어
      트리뷰트는 항상 0으로 설정됩니다. 이러한 어트리뷰트를 얻으려면
      "os.stat()"을 호출하십시오.

      결과는 *follow_symlinks* 가 "True" 및 "False"일 때에 대해 별도로
      "os.DirEntry" 객체에 캐시 됩니다. 최신 정보를 가져오려면,
      "os.stat()"을 호출하십시오.

   "os.DirEntry"와 "pathlib.Path"의 여러 어트리뷰트와 메서드 사이에는
   좋은 일치가 있음에 유의하십시오. 특히, "name" 어트리뷰트는
   "is_dir()", "is_file()", "is_symlink()" 및 "stat()" 메서드와 같은
   의미가 있습니다.

   버전 3.5에 추가.

   버전 3.6에서 변경: "PathLike" 인터페이스에 대한 지원이 추가되었습니
   다. 윈도우에서 "bytes" 경로에 대한 지원이 추가되었습니다.

os.stat(path, *, dir_fd=None, follow_symlinks=True)

   파일 또는 파일 기술자의 상태를 가져옵니다. 주어진 경로에 대해
   "stat()" 시스템 호출과 같은 작업을 수행합니다. *path* 는 문자열이나
   바이트열 -- 직접 또는 "PathLike" 인터페이스를 통해 간접적으로 -- 또
   는 열린 파일 기술자로 지정될 수 있습니다. "stat_result" 객체를 반환
   합니다.

   이 함수는 일반적으로 심볼릭 링크를 따릅니다; 심볼릭 링크를 stat 하
   려면, 인자 "follow_symlinks=False"를 추가하거나 "lstat()"를 사용하
   십시오.

   이 함수는 파일 기술자 지정 및 심볼릭 링크를 따르지 않음을 지원할 수
   있습니다.

   윈도우에서, "follow_symlinks=False"를 전달하면 심볼릭 링크와 디렉터
   리 정션(directory junction)을 포함하는 모든 이름 서로게이트(name-
   surrogate) 재해석 지점(reparse point)을 따라가지 않습니다. 링크처럼
   보이지 않거나 운영 체제에서 따라갈 수 없는 다른 유형의 재해석 지점
   은 직접 열립니다. 여러 링크 체인을 따라갈 때, 전체 탐색을 방해하는
   비 링크 대신 원래 링크가 반환될 수 있습니다. 이 경우 최종 경로에 대
   한 stat 결과를 얻으려면, "os.path.realpath()" 함수를 사용하여 가능
   한 한 멀리 간 경로 이름을 확인한 다음 드 결과에 대해 "lstat()"을 호
   출하십시오. 매달린(dangling) 심볼릭 링크나 정션 지점에는 적용되지
   않고, 일반적인 예외가 발생합니다.

   예:

      >>> import os
      >>> statinfo = os.stat('somefile.txt')
      >>> statinfo
      os.stat_result(st_mode=33188, st_ino=7876932, st_dev=234881026,
      st_nlink=1, st_uid=501, st_gid=501, st_size=264, st_atime=1297230295,
      st_mtime=1297230027, st_ctime=1297230027)
      >>> statinfo.st_size
      264

   더 보기: "fstat()" 및 "lstat()" 함수.

   버전 3.3에 추가: *dir_fd* 및 *follow_symlinks* 인자와 경로 대신 파
   일 기술자를 지정하는 것을 추가했습니다.

   버전 3.6에서 변경: *경로류 객체*를 받아들입니다.

   버전 3.8에서 변경: 윈도우에서, 이제 운영 체제가 결정할 수 있는 모든
   재해석 지점을 따라가고, "follow_symlinks=False"를 전달하면 모든 이
   름 서로게이트 재해석 지점을 따라가지 않습니다. 운영 체제가 따라갈
   수 없는 재해석 지점에 도달하면, *stat*은 이제 에러를 발생시키는 대
   신 "follow_symlinks=False"가 지정된 것처럼 원래 경로에 대한 정보를
   반환합니다.

class os.stat_result

   어트리뷰트가 "stat" 구조체의 멤버와 대략 일치하는 객체.
   "os.stat()", "os.fstat()" 및 "os.lstat()"의 결과로 사용됩니다.

   어트리뷰트:

   st_mode

      파일 모드: 파일 유형 및 파일 모드 비트 (사용 권한).

   st_ino

      플랫폼에 따라 다르지만, 0이 아니면, 지정된 값의 "st_dev"은 파일
      을 고유하게 식별합니다. 일반적으로:

      * 유닉스의 아이노드 번호,

      * 윈도우의 파일 인덱스

   st_dev

      이 파일이 있는 장치의 식별자.

   st_nlink

      하드 링크 수.

   st_uid

      파일 소유자의 사용자 식별자.

   st_gid

      파일 소유자의 그룹 식별자.

   st_size

      일반 파일 또는 심볼릭 링크면, 바이트 단위의 파일의 크기. 심볼릭
      링크의 크기는 포함하고 있는 경로명의 길이이며, 끝나는 널 바이트
      는 포함하지 않습니다.

   타임스탬프:

   st_atime

      초 단위의 가장 최근의 액세스 시간.

   st_mtime

      초 단위의 가장 최근의 내용 수정 시간.

   st_ctime

      플랫폼에 따라 다릅니다:

      * 유닉스에서 가장 최근의 메타 데이터 변경 시간,

      * 윈도우에서 생성 시간, 단위는 초.

   st_atime_ns

      나노초 정수 단위의 가장 최근의 액세스 시간.

   st_mtime_ns

      나노초 정수 단위의 가장 최근의 내용 수정 시간.

   st_ctime_ns

      플랫폼에 따라 다릅니다:

      * 유닉스에서 가장 최근의 메타 데이터 변경 시간,

      * 윈도우에서 생성 시간, 단위는 나노초 정수.

   참고:

     "st_atime", "st_mtime" 및 "st_ctime" 어트리뷰트의 정확한 의미와
     해상도는 운영 체제와 파일 시스템에 따라 다릅니다. 예를 들어, FAT
     또는 FAT32 파일 시스템을 사용하는 윈도우 시스템에서, "st_mtime"은
     2초 해상도를, "st_atime"는 단지 1일 해상도를 갖습니다. 자세한 내
     용은 운영 체제 설명서를 참조하십시오.마찬가지로, "st_atime_ns",
     "st_mtime_ns" 및 "st_ctime_ns"가 항상 나노초 단위로 표시되지만,
     많은 시스템은 나노초 정밀도를 제공하지 않습니다. 나노초 정밀도를
     제공하는 시스템에서, "st_atime", "st_mtime" 및 "st_ctime"를 저장
     하는 데 사용되는 부동 소수점 객체는, 이 값을 모두 보존할 수 없으
     므로, 약간 부정확합니다. 정확한 타임스탬프가 필요하면, 항상
     "st_atime_ns", "st_mtime_ns" 및 "st_ctime_ns"를 사용해야 합니다.

   (리눅스와 같은) 일부 유닉스 시스템에서는, 다음 어트리뷰트도 사용할
   수 있습니다:

   st_blocks

      파일에 할당된 512-바이트 블록 수. 파일에 구멍이 있으면
      "st_size"/512보다 작을 수 있습니다.

   st_blksize

      효율적인 파일 시스템 I/O를 위해 "선호되는" 블록 크기. 더 작은 크
      기로 파일에 기록하면 비효율적인 읽기-수정-다시 쓰기가 발생할 수
      있습니다.

   st_rdev

      아이노드 장치면 장치 유형.

   st_flags

      파일에 대한 사용자 정의 플래그.

   (FreeBSD와 같은) 다른 유닉스 시스템에서는, 다음 어트리뷰트를 사용할
   수 있습니다 (그러나 root가 사용하려고 할 때만 채워질 수 있습니다):

   st_gen

      파일 생성 번호.

   st_birthtime

      파일 생성 시간.

   Solaris 및 파생 상품에서, 다음 어트리뷰트도 사용할 수 있습니다:

   st_fstype

      파일을 포함하는 파일 시스템의 유형을 고유하게 식별하는 문자열.

   맥 OS 시스템에서는, 다음 어트리뷰트도 사용할 수 있습니다:

   st_rsize

      파일의 실제 크기.

   st_creator

      파일의 생성자.

   st_type

      파일 유형.

   윈도우 시스템에서는, 다음 어트리뷰트도 사용할 수 있습니다:

   st_file_attributes

      윈도우 파일 어트리뷰트: "GetFileInformationByHandle()"에 의해 반
      환된 "BY_HANDLE_FILE_INFORMATION" 구조체의 "dwFileAttributes" 멤
      버. "stat" 모듈의 "FILE_ATTRIBUTE_*" 상수를 참조하십시오.

   st_reparse_tag

      "st_file_attributes"에 "FILE_ATTRIBUTE_REPARSE_POINT"가 설정되면
      , 이 필드에는 재해석 지점의 유형을 식별하는 태그가 포함됩니다.
      "stat" 모듈의 "IO_REPARSE_TAG_*" 상수를 참조하십시오.

   표준 모듈 "stat"는 "stat" 구조체에서 정보를 추출하는 데 유용한 함수
   와 상수를 정의합니다. (윈도우에서는, 일부 항목에 더미 값이 채워집니
   다.)

   이전 버전과의 호환성을 위해, "stat_result" 인스턴스는 "stat" 구조체
   의 가장 중요한 (그리고 이식성 있는) 멤버를 제공하는 최소 10개의 정
   수로 구성된 튜플로 액세스할 수도 있는데, "st_mode", "st_ino",
   "st_dev", "st_nlink", "st_uid", "st_gid", "st_size", "st_atime",
   "st_mtime", "st_ctime" 순서입니다. 일부 구현에서는 끝에 더 많은 항
   목을 추가 할 수 있습니다. 이전 버전의 파이썬과의 호환성을 위해,
   "stat_result"에 튜플로 액세스하면 항상 정수가 반환됩니다.

   버전 3.3에 추가: "st_atime_ns", "st_mtime_ns" 및 "st_ctime_ns" 멤버
   가 추가되었습니다.

   버전 3.5에 추가: 윈도우에서 "st_file_attributes" 멤버를 추가했습니
   다.

   버전 3.5에서 변경: 윈도우는 이제 사용 가능할 때 파일 인덱스를
   "st_ino"로 반환합니다.

   버전 3.7에 추가: Solaris/파생 제품에 "st_fstype" 멤버를 추가했습니
   다.

   버전 3.8에 추가: 윈도우에서 "st_reparse_tag" 멤버를 추가했습니다.

   버전 3.8에서 변경: 윈도우에서, "st_mode" 멤버는 이제 특수 파일을
   "S_IFCHR", "S_IFIFO" 또는 "S_IFBLK"로 적절히 식별합니다.

os.statvfs(path)

   주어진 경로에 대해 "statvfs()" 시스템 호출을 수행합니다. 반환 값은
   주어진 경로의 파일 시스템을 설명하는 객체인데, 어트리뷰트가
   "statvfs" 구조체의 멤버인 "f_bsize", "f_frsize", "f_blocks",
   "f_bfree", "f_bavail", "f_files", "f_ffree", "f_favail", "f_flag",
   "f_namemax", "f_fsid"에 해당합니다.

   "f_flag" 어트리뷰트의 비트 플래그에 대해 두 개의 모듈 수준 상수가
   정의됩니다: "ST_RDONLY"가 설정되면, 파일 시스템은 읽기 전용으로 마
   운트되었고, "ST_NOSUID"가 설정되면, setuid/setgid 비트의 의미가 비
   활성화되었거나 지원되지 않습니다.

   추가적인 모듈 수준 상수가 GNU/glibc 기반 시스템에 대해 정의됩니다.
   이들은 "ST_NODEV" (장치 특수 파일에 대한 액세스 금지), "ST_NOEXEC"
   (프로그램 실행 금지), "ST_SYNCHRONOUS" (한 번에 쓰기 동기화),
   "ST_MANDLOCK" (FS에 필수 잠금 허용), "ST_WRITE" (파일/디렉터리/심볼
   릭 링크 쓰기), "ST_APPEND" (덧붙이기 전용 파일), "ST_IMMUTABLE" (불
   변 파일), "ST_NOATIME" (액세스 시간을 갱신하지 않음),
   "ST_NODIRATIME" (디렉터리 액세스 시간을 갱신하지 않음),
   "ST_RELATIME" (mtime/ctime에 상대적으로 atime을 갱신).

   이 함수는 파일 기술자 지정을 지원할 수 있습니다.

   가용성: 유닉스.

   버전 3.2에서 변경: "ST_RDONLY" 및 "ST_NOSUID" 상수가 추가되었습니다
   .

   버전 3.3에 추가: *path*에 열린 파일 기술자를 지정하는 지원이 추가되
   었습니다.

   버전 3.4에서 변경: "ST_NODEV", "ST_NOEXEC", "ST_SYNCHRONOUS",
   "ST_MANDLOCK", "ST_WRITE", "ST_APPEND", "ST_IMMUTABLE",
   "ST_NOATIME", "ST_NODIRATIME" 및 "ST_RELATIME" 상수가 추가되었습니
   다.

   버전 3.6에서 변경: *경로류 객체*를 받아들입니다.

   버전 3.7에 추가: "f_fsid" 추가.

os.supports_dir_fd

   "os" 모듈의 어떤 함수가 *dir_fd* 매개 변수로 열린 파일 기술자를 받
   아들이는지를 나타내는 "set" 객체. 플랫폼마다 다른 기능을 제공하며,
   파이썬이 *dir_fd* 매개 변수를 구현하는 데 사용하는 하부 기능이 파이
   썬이 지원하는 모든 플랫폼에서 제공되지는 않습니다. 일관성을 위해,
   *dir_fd* 를 지원할 수도 있는 함수는 항상 매개 변수를 지정할 수 있도
   록 하지만, 로컬에서 사용할 수 없을 때, 기능을 사용하면 예외를 발생
   시킵니다. (*dir_fd*에 "None"을 지정하는 것은 모든 플랫폼에서 항상
   지원됩니다.)

   특정 함수가 *dir_fd* 매개 변수로 열린 파일 기술자를 받아들이는지 확
   인하려면, "supports_dir_fd"에 "in" 연산자를 사용하십시오. 예를 들어
   , 이 표현식은 로컬 플랫폼에서 "os.stat()"이 *dir_fd* 매개 변수로 열
   린 파일 기술자를 받아들이면 "True"로 평가됩니다:

      os.stat in os.supports_dir_fd

   현재 *dir_fd* 매개 변수는 유닉스 플랫폼에서만 작동합니다; 어느 것도
   윈도우에서 작동하지 않습니다.

   버전 3.3에 추가.

os.supports_effective_ids

   "os.access()"가 로컬 플랫폼에서 *effective_ids* 매개 변수에 "True"
   를 지정하는 것을 허용하는지를 나타내는 "set" 객체. (*effective_ids*
   에 "False"를 지정하는 것은 모든 플랫폼에서 항상 지원됩니다.) 로컬
   플랫폼이 지원하면, 컬렉션에 "os.access()"가 포함됩니다; 그렇지 않으
   면 비어있게 됩니다.

   이 표현식은 로컬 플랫폼에서 "os.access()"가 "effective_ids=True"를
   지원하면 "True"로 평가됩니다:

      os.access in os.supports_effective_ids

   현재 *effective_ids* 는 유닉스 플랫폼에서만 지원됩니다; 윈도우에서
   는 작동하지 않습니다.

   버전 3.3에 추가.

os.supports_fd

   "os" 모듈의 어떤 함수가 로컬 플랫폼에서 자신의 *path* 매개 변수에
   열린 파일 기술자를 지정하는 것을 허용하는지를 나타내는 "set" 객체.
   플랫폼마다 다른 기능을 제공하며, 파이썬이 *path*로 열린 파일 기술자
   를 받아들이는 데 사용하는 하부 기능이 파이썬이 지원하는 모든 플랫폼
   에서 제공되지는 않습니다.

   특정 함수가 *path* 매개 변수에 열린 파일 기술자를 지정할 수 있도록
   허용하는지를 판단하려면, "supports_fd"에 "in" 연산자를 사용하십시오
   . 예를 들어, 이 표현식은 로컬 플랫폼에서 "os.chdir()"가 *path*로 열
   린 파일 기술자를 받아들이면 "True"로 평가됩니다:

      os.chdir in os.supports_fd

   버전 3.3에 추가.

os.supports_follow_symlinks

   "os" 모듈의 어떤 함수가 *follow_symlinks* 매개 변수로 "False"를 받
   아들이는지를 나타내는 "set" 객체. 플랫폼마다 다른 기능을 제공하며,
   파이썬이 *follow_symlinks*를 구현하는 데 사용하는 하부 기능이 파이
   썬이 지원하는 모든 플랫폼에서 제공되지는 않습니다. 일관성을 위해,
   *follow_symlinks* 를 지원할 수도 있는 함수는 항상 매개 변수를 지정
   할 수 있도록 하지만, 로컬에서 사용할 수 없을 때, 기능이 사용되면 예
   외를 발생시킵니다. (*follow_symlinks*에 "None"을 지정하는 것은 모든
   플랫폼에서 항상 지원됩니다.)

   특정 함수가 *follow_symlinks* 매개 변수로 "False"를 받아들이는지 확
   인하려면, "supports_follow_symlinks"에 "in" 연산자를 사용하십시오.
   예를 들어, 이 표현식은 로컬 플랫폼에서 "os.stat()"을 호출할 때
   "follow_symlinks=False"를 지정할 수 있으면 "True"로 평가됩니다:

      os.stat in os.supports_follow_symlinks

   버전 3.3에 추가.

os.symlink(src, dst, target_is_directory=False, *, dir_fd=None)

   *src를* 가리키는 *dst* 라는 이름의 심볼릭 링크를 만듭니다.

   윈도우에서, 심볼릭 링크는 파일이나 디렉터리를 나타내며, 동적으로 대
   상에 맞춰 변형되지 않습니다. 대상이 있으면, 일치하도록 심볼릭 링크
   의 유형이 만들어집니다. 그렇지 않으면, *target_is_directory* 가
   "True" 면 심볼릭 링크가 디렉터리로 만들어지고, 그렇지 않으면 파일
   심볼릭 링크(기본값)가 만들어집니다. 비 윈도우 플랫폼에서는
   *target_is_directory* 가 무시됩니다.

   이 함수는 디렉터리 기술자에 상대적인 경로를 지원할 수 있습니다.

   참고:

     최신 버전의 윈도우 10에서, 개발자 모드가 활성화되면, 권한이 없는
     계정이 심볼릭 링크를 만들 수 있습니다. 개발자 모드를 사용할 수 없
     거나 활성화되어 있지 않으면, *SeCreateSymbolicLinkPrivilege* 권한
     이 필요하거나, 프로세스를 관리자로 실행해야 합니다.권한이 없는 사
     용자가 함수를 호출하면 "OSError"가 발생합니다.

   "src", "dst", "dir_fd"를 인자로 감사 이벤트(auditing event)
   "os.symlink"를 발생시킵니다.

   가용성: 유닉스, 윈도우.

   버전 3.2에서 변경: 윈도우 6.0 (Vista) 심볼릭 링크에 대한 지원이 추
   가되었습니다.

   버전 3.3에 추가: *dir_fd* 인자를 추가했으며, 이제 비 윈도우 플랫폼
   에서 *target_is_directory* 를 허용합니다.

   버전 3.6에서 변경: *src* 및 *dst*로 *경로류 객체*를 받아들입니다.

   버전 3.8에서 변경: 개발자 모드가 있는 윈도우에서 권한 상승 없는
   (unelevated) 심볼릭 링크에 대한 지원이 추가되었습니다.

os.sync()

   디스크에 모든 것을 쓰도록 강제합니다.

   가용성: 유닉스.

   버전 3.3에 추가.

os.truncate(path, length)

   최대 *length* 바이트가 되도록 *path*에 해당하는 파일을 자릅니다.

   이 함수는 파일 기술자 지정을 지원할 수 있습니다.

   "path", "length"를 인자로 감사 이벤트(auditing event) "os.truncate"
   를 발생시킵니다.

   가용성: 유닉스, 윈도우.

   버전 3.3에 추가.

   버전 3.5에서 변경: 윈도우 지원 추가

   버전 3.6에서 변경: *경로류 객체*를 받아들입니다.

os.unlink(path, *, dir_fd=None)

   파일 *path*를 제거(삭제)합니다. 이 함수는 의미상 "remove()"와 같습
   니다; "unlink" 라는 이름은 전통적인 유닉스 이름입니다. 자세한 내용
   은 "remove()" 설명서를 참조하십시오.

   "path", "dir_fd"를 인자로 감사 이벤트(auditing event) "os.remove"를
   발생시킵니다.

   버전 3.3에 추가: *dir_fd* 매개 변수

   버전 3.6에서 변경: *경로류 객체*를 받아들입니다.

os.utime(path, times=None, *[, ns], dir_fd=None, follow_symlinks=True)

   *path*로 지정된 파일의 액세스 및 수정 시간을 설정합니다.

   "utime()"은 *times* 과 *ns* 라는 두 개의 선택적 매개 변수를 취합니
   다. *path*에 설정할 시간을 지정하며 다음과 같이 사용됩니다:

   * *ns* 가 지정되면, "(atime_ns, mtime_ns)" 형식의 2-튜플이어야 하며
     , 각 멤버는 나노초를 나타내는 int입니다.

   * *times* 가 "None"이 아니면, "(atime, mtime)" 형식의 2-튜플이어야
     하며, 각 멤버는 초를 나타내는 int 또는 float입니다.

   * *times* 가 "None"이고 *ns* 가 지정되지 않으면, "ns=(atime_ns,
     mtime_ns)"를 지정하는 것과 같은데, 두 시간 모두 현재 시각입니다.

   *times* 와 *ns*에 모두 튜플을 지정하는 것은 에러입니다.

   여기서 설정한 정확한 시간은 운영 체제가 액세스 및 수정 시간을 기록
   하는 해상도에 따라 뒤따르는 "stat()" 호출에서 반환되지 않을 수 있음
   에 주의해야 합니다; "stat()"를 참조하세요. 정확한 시간을 보존하는
   가장 좋은 방법은 *utime* 의 *ns* 매개 변수에 "os.stat()" 결과 객체
   의 *st_atime_ns* 및 *st_mtime_ns* 필드를 사용하는 것입니다.

   이 함수는 파일 기술자 지정, 디렉터리 기술자에 상대적인 경로 및 심볼
   릭 링크를 따르지 않음을 지원할 수 있습니다.

   "path", "times", "ns", "dir_fd"를 인자로 감사 이벤트(auditing
   event) "os.utime"을 발생시킵니다.

   버전 3.3에 추가: *path*에 열린 파일 기술자를 지정하는 것과 *dir_fd*
   , *follow_symlinks* 및 *ns* 매개 변수 지원이 추가되었습니다.

   버전 3.6에서 변경: *경로류 객체*를 받아들입니다.

os.walk(top, topdown=True, onerror=None, followlinks=False)

   트리를 하향식 또는 상향식으로 탐색하여 디렉터리 트리에 있는 파일명
   을 생성합니다. 디렉터리 *top*을 루트로 하는 트리의 디렉터리(*top*
   자체를 포함합니다)마다, 3-튜플 "(dirpath, dirnames, filenames)"를
   산출합니다.

   *dirpath* 는 디렉터리 경로인 문자열입니다. *dirnames* 는 *dirpath*
   의 하위 디렉터리 이름 리스트입니다 ("'.'" 및 "'..'" 제외).
   *filenames* 는 *dirpath*에 있는 디렉터리가 아닌 파일의 이름 리스트
   입니다. 리스트에 들어있는 이름에는 경로 구성 요소가 들어 있지 않음
   에 유의하십시오. *dirpath* 에 있는 파일이나 디렉터리에 대한 전체 경
   로(*top*으로 시작하는)를 얻으려면, "os.path.join(dirpath, name)"을
   수행하십시오. 리스트가 정렬되는지는 파일 시스템에 따라 다릅니다. 리
   스트를 생성하는 동안 *dirpath* 디렉터리에서 파일이 제거되거나 추가
   되면, 해당 파일의 이름이 포함되는지는 지정되지 않습니다.

   선택적 인자 *topdown* 이 "True"이거나 지정되지 않으면, 디렉터리에
   대한 3-튜플은 하위 디렉터리에 대한 3-튜플이 생성되기 전에 생성됩니
   다 (디렉터리는 하향식으로 생성됩니다). *topdown* 이 "False"면, 모든
   하위 디렉터리에 대한 3-튜플 다음에 디렉터리에 대한 3-튜플이 생성됩
   니다 (디렉터리가 상향식으로 생성됨). *topdown* 의 값에 상관없이, 디
   렉터리와 해당 하위 디렉터리의 튜플이 생성되기 전에 하위 디렉터리 목
   록이 조회됩니다.

   *topdown* 이 "True" 일 때, 호출자는 (아마도 "del" 또는 슬라이스 대
   입을 사용하여) *dirnames* 리스트를 수정할 수 있으며, "walk()"는 이
   름이 *dirnames* 남아있는 하위 디렉터리로만 재귀합니다; 검색을 가지
   치기하거나, 특정 방문 순서를 지정하거나, 심지어 "walk()"가 다시 시
   작하기 전에 호출자가 새로 만들거나 이름을 바꾼 디렉터리에 대해
   "walk()"에 알릴 때도 사용할 수 있습니다. *topdown* 이 "False"일 때
   *dirnames*를 수정하는 것은 walk의 동작에 영향을 주지 못하는데, 상향
   식 모드에서 *dirnames*의 디렉터리는 *dirpath* 자체가 생성되기 전에
   생성되기 때문입니다.

   기본적으로, "scandir()" 호출의 에러는 무시됩니다. 선택적 인자
   *onerror* 가 지정되면, 함수여야 합니다; 하나의 인자 "OSError" 인스
   턴스로 호출됩니다. 에러를 보고하고 walk를 계속하도록 하거나, 예외를
   발생시켜 walk를 중단할 수 있습니다. 파일명은 예외 객체의 "filename"
   어트리뷰트로 제공됩니다.

   기본적으로, "walk()"는 디렉터리로 해석되는 심볼릭 링크로 이동하지
   않습니다. 지원하는 시스템에서, 심볼릭 링크가 가리키는 디렉터리를 방
   문하려면, *followlinks*를 "True"로 설정하십시오.

   참고:

     심볼릭 링크가 자신의 부모 디렉터리를 가리킬 때, *followlinks*를
     "True"로 설정하면 무한 재귀가 발생할 수 있음에 주의해야 합니다.
     "walk()"는 이미 방문한 디렉터리를 추적하지 않습니다.

   참고:

     상대 경로명을 전달할 때는, "walk()"가 실행되는 도중 현재 작업 디
     렉터리를 변경하지 마십시오. "walk()"는 현재 디렉터리를 절대로 변
     경하지 않으며, 호출자도 마찬가지라고 가정합니다.

   이 예는 시작 디렉터리 아래의 각 디렉터리에 있는 비 디렉터리 파일이
   차지한 바이트 수를 표시합니다. 단, CVS 하위 디렉터리 아래는 보지 않
   습니다:

      import os
      from os.path import join, getsize
      for root, dirs, files in os.walk('python/Lib/email'):
          print(root, "consumes", end=" ")
          print(sum(getsize(join(root, name)) for name in files), end=" ")
          print("bytes in", len(files), "non-directory files")
          if 'CVS' in dirs:
              dirs.remove('CVS')  # don't visit CVS directories

   다음 예("shutil.rmtree()"의 간단한 구현)에서는, 트리를 상향식으로
   탐색하는 것이 필수적입니다, "rmdir()"는 비어 있지 않은 디렉터리를
   삭제할 수 없습니다:

      # Delete everything reachable from the directory named in "top",
      # assuming there are no symbolic links.
      # CAUTION:  This is dangerous!  For example, if top == '/', it
      # could delete all your disk files.
      import os
      for root, dirs, files in os.walk(top, topdown=False):
          for name in files:
              os.remove(os.path.join(root, name))
          for name in dirs:
              os.rmdir(os.path.join(root, name))

   버전 3.5에서 변경: 이 함수는 이제 "os.listdir()" 대신
   "os.scandir()"를 호출하기 때문에, "os.stat()" 호출 수를 줄여 더 빨
   라졌습니다.

   버전 3.6에서 변경: *경로류 객체*를 받아들입니다.

os.fwalk(top='.', topdown=True, onerror=None, *, follow_symlinks=False, dir_fd=None)

   이 함수는 "walk()"와 똑같이 동작합니다. 단, 4-튜플 "(dirpath,
   dirnames, filenames, dirfd)"를 산출하고 "dir_fd"를 지원합니다.

   *dirpath* , *dirnames* 및 *filenames* 은 "walk()" 출력과 같고,
   *dirfd* 는 *dirpath* 디렉터리를 가리키는 파일 기술자입니다.

   이 함수는 항상 디렉터리 기술자에 상대적인 경로 및 심볼릭 링크를 따
   르지 않음을 지원합니다. 하지만, 다른 함수와는 달리,
   *follow_symlinks*에 대한 "fwalk()"의 기본값은 "False"임에 주의하십
   시오.

   참고:

     "fwalk()"는 다음 이터레이션 단계까지만 유효한 파일 기술자를 산출
     하기 때문에, 더 오래 유지하려면 복제해야 합니다 (예를 들어,
     "dup()"로).

   이 예는 시작 디렉터리 아래의 각 디렉터리에 있는 비 디렉터리 파일이
   차지한 바이트 수를 표시합니다. 단, CVS 하위 디렉터리 아래는 보지 않
   습니다:

      import os
      for root, dirs, files, rootfd in os.fwalk('python/Lib/email'):
          print(root, "consumes", end="")
          print(sum([os.stat(name, dir_fd=rootfd).st_size for name in files]),
                end="")
          print("bytes in", len(files), "non-directory files")
          if 'CVS' in dirs:
              dirs.remove('CVS')  # don't visit CVS directories

   다음 예에서는, 트리를 상향식으로 탐색하는 것이 필수적입니다:
   "rmdir()"는 비어 있지 않은 디렉터리를 삭제할 수 없습니다:

      # Delete everything reachable from the directory named in "top",
      # assuming there are no symbolic links.
      # CAUTION:  This is dangerous!  For example, if top == '/', it
      # could delete all your disk files.
      import os
      for root, dirs, files, rootfd in os.fwalk(top, topdown=False):
          for name in files:
              os.unlink(name, dir_fd=rootfd)
          for name in dirs:
              os.rmdir(name, dir_fd=rootfd)

   가용성: 유닉스.

   버전 3.3에 추가.

   버전 3.6에서 변경: *경로류 객체*를 받아들입니다.

   버전 3.7에서 변경: "bytes" 경로에 대한 지원이 추가되었습니다.

os.memfd_create(name[, flags=os.MFD_CLOEXEC])

   익명 파일을 만들고 이를 가리키는 파일 기술자를 반환합니다. *flags*
   는 시스템에서 사용할 수 있는 "os.MFD_*" 상수(또는 이들의 비트별 OR
   조합) 중 하나여야 합니다. 기본적으로, 새 파일 기술자는 상속 불가능
   합니다.

   *name*에 제공된 이름은 파일명으로 사용되며 해당 심볼릭 링크의 대상
   으로 "/proc/self/fd/" 디렉터리에 표시됩니다. 표시된 이름에는 항상
   "memfd:" 접두어가 붙으며 디버깅 목적으로만 사용됩니다. 이름은 파일
   기술자의 동작에 영향을 미치지 않고, 여러 파일이 부작용 없이 같은 이
   름을 가질 수 있습니다.

   가용성: glibc 2.27 이상을 사용하는 리눅스 3.17 이상.

   버전 3.8에 추가.

os.MFD_CLOEXEC
os.MFD_ALLOW_SEALING
os.MFD_HUGETLB
os.MFD_HUGE_SHIFT
os.MFD_HUGE_MASK
os.MFD_HUGE_64KB
os.MFD_HUGE_512KB
os.MFD_HUGE_1MB
os.MFD_HUGE_2MB
os.MFD_HUGE_8MB
os.MFD_HUGE_16MB
os.MFD_HUGE_32MB
os.MFD_HUGE_256MB
os.MFD_HUGE_512MB
os.MFD_HUGE_1GB
os.MFD_HUGE_2GB
os.MFD_HUGE_16GB

   이 플래그들은 "memfd_create()"로 전달될 수 있습니다.

   가용성: glibc 2.27 이상을 사용하는 리눅스 3.17 이상. "MFD_HUGE*" 플
   래그는 리눅스 4.14 이후에만 사용 가능합니다.

   버전 3.8에 추가.


리눅스 확장 어트리뷰트
----------------------

버전 3.3에 추가.

이 함수들은 모두 리눅스에서만 사용 가능합니다.

os.getxattr(path, attribute, *, follow_symlinks=True)

   *path*의 확장 파일 시스템 어트리뷰트 *attribute*의 값을 반환합니다.
   *attribute* 는 bytes 또는 str(직접 또는 "PathLike" 인터페이스를 통
   해 간접적으로)일 수 있습니다. str이면, 파일 시스템 인코딩으로 인코
   딩됩니다.

   이 함수는 파일 기술자 지정 및 심볼릭 링크를 따르지 않음을 지원할 수
   있습니다.

   "path", "attribute"를 인자로 감사 이벤트(auditing event)
   "os.getxattr"을 발생시킵니다.

   버전 3.6에서 변경: *path* 및 *attribute*에 대해 *경로류 객체*를 받
   아들입니다.

os.listxattr(path=None, *, follow_symlinks=True)

   *path* 의 확장 파일 시스템 어트리뷰트 목록을 반환합니다. 목록의 어
   트리뷰트는 파일 시스템 인코딩으로 디코딩된 문자열로 표시됩니다.
   *path* 가 "None"이면, "listxattr()"는 현재 디렉터리를 검사합니다.

   이 함수는 파일 기술자 지정 및 심볼릭 링크를 따르지 않음을 지원할 수
   있습니다.

   "path"를 인자로 감사 이벤트(auditing event) "os.listxattr"을 발생시
   킵니다.

   버전 3.6에서 변경: *경로류 객체*를 받아들입니다.

os.removexattr(path, attribute, *, follow_symlinks=True)

   *path* 에서 확장 파일 시스템 어트리뷰트 *attribute* 을 제거합니다.
   *attribute* 는 bytes 또는 str(직접 또는 "PathLike" 인터페이스를 통
   해 간접적으로)이어야합니다. 문자열이면, 파일 시스템 인코딩으로 인코
   딩됩니다.

   이 함수는 파일 기술자 지정 및 심볼릭 링크를 따르지 않음을 지원할 수
   있습니다.

   "path", "attribute"를 인자로 감사 이벤트(auditing event)
   "os.removexattr"을 발생시킵니다.

   버전 3.6에서 변경: *path* 및 *attribute*에 대해 *경로류 객체*를 받
   아들입니다.

os.setxattr(path, attribute, value, flags=0, *, follow_symlinks=True)

   Set the extended filesystem attribute *attribute* on *path* to
   *value*. *attribute* must be a bytes or str with no embedded NULs
   (directly or indirectly through the "PathLike" interface). If it is
   a str, it is encoded with the filesystem encoding.  *flags* may be
   "XATTR_REPLACE" or "XATTR_CREATE". If "XATTR_REPLACE" is given and
   the attribute does not exist, "ENODATA" will be raised. If
   "XATTR_CREATE" is given and the attribute already exists, the
   attribute will not be created and "EEXISTS" will be raised.

   이 함수는 파일 기술자 지정 및 심볼릭 링크를 따르지 않음을 지원할 수
   있습니다.

   참고:

     리눅스 커널 버전 2.6.39 미만의 버그로 인해 flags 인자가 일부 파일
     시스템에서 무시되었습니다.

   "path", "attribute", "value", "flags"를 인자로 감사 이벤트(auditing
   event) "os.setxattr"을 발생시킵니다.

   버전 3.6에서 변경: *path* 및 *attribute*에 대해 *경로류 객체*를 받
   아들입니다.

os.XATTR_SIZE_MAX

   확장 어트리뷰트 값의 최대 크기입니다. 현재, 리눅스에서 64 KiB입니다
   .

os.XATTR_CREATE

   이것은 "setxattr()"의 flags 인자를 위한 값입니다. 연산이 반드시 어
   트리뷰트를 새로 만들어야 함을 나타냅니다.

os.XATTR_REPLACE

   이것은 "setxattr()"의 flags 인자를 위한 값입니다. 연산이 반드시 기
   존 어트리뷰트를 대체해야 함을 나타냅니다.


프로세스 관리
=============

이 함수들은 프로세스를 만들고 관리하는데 사용될 수 있습니다.

다양한 "exec*" 함수는 프로세스로 로드되는 새 프로그램에 대한 인자 목록
을 받아들입니다. 각각의 경우에, 첫 번째 인자는 사용자가 명령 줄에 입력
할 수 있는 인자가 아닌 프로그램 자체의 이름으로 새 프로그램에 전달됩니
다. C 프로그래머에게, 이것은 프로그램의 "main()"에 전달된 "argv[0]"입
니다. 예를 들어, "os.execv('/bin/echo', ['foo', 'bar'])"는 표준 출력에
"bar"만 인쇄합니다; "foo"는 무시되는 것처럼 보이게 됩니다.

os.abort()

   현재 프로세스에 "SIGABRT" 시그널을 생성합니다. 유닉스에서, 기본 동
   작은 코어 덤프를 생성하는 것입니다; 윈도우에서, 프로세스는 즉시 종
   료 코드 "3"을 반환합니다. 이 함수를 호출하면 "signal.signal()"를 사
   용하여 "SIGABRT"에 등록된 파이썬 시그널 처리기를 호출하지 않게 됨에
   주의하시기 바랍니다.

os.add_dll_directory(path)

   DLL 검색 경로에 path를 추가합니다.

   이 검색 경로는 임포트 된 확장 모듈의 종속성을 해결할 때 사용됩니다
   (모듈 자체는 sys.path를 통해 결정됩니다). 또한 "ctypes"에서도 사용
   됩니다.

   반환된 객체의 **close()**를 호출하거나 반환된 객체를 "with" 문에서
   사용하여 디렉터리를 제거하십시오.

   DLL이 로드되는 방법에 대한 자세한 내용은 마이크로소프트 설명서를 참
   조하십시오.

   "path"를 인자로 감사 이벤트(auditing event) "os.add_dll_directory"
   를 발생시킵니다.

   가용성: 윈도우.

   버전 3.8에 추가: 이전 버전의 CPython은 현재 프로세스의 기본 동작을
   사용하여 DLL을 해결(resolve)합니다. 이로 인해 때때로 "PATH"나 현재
   작업 디렉터리를 검색하거나, "AddDllDirectory"와 같은 OS 함수가 효과
   가 없게 되는 것과 같은 일관성 없는 결과를 낳습니다.3.8에서는, 일관
   성을 보장하기 위해 이제 DLL이 로드되는 두 가지 기본 방법이 프로세스
   전반의 동작을 명시적으로 재정의합니다. 라이브러리 갱신에 대한 정보
   는 이식 주의 사항을 참조하십시오.

os.execl(path, arg0, arg1, ...)
os.execle(path, arg0, arg1, ..., env)
os.execlp(file, arg0, arg1, ...)
os.execlpe(file, arg0, arg1, ..., env)
os.execv(path, args)
os.execve(path, args, env)
os.execvp(file, args)
os.execvpe(file, args, env)

   이 함수들은 모두 현재 프로세스를 대체해서 새로운 프로그램을 실행합
   니다; 반환되지 않습니다. 유닉스에서, 새로운 실행 파일이 현재 프로세
   스에 로드되고, 호출자와 같은 프로세스 ID를 갖게 됩니다. 에러는
   "OSError" 예외로 보고됩니다.

   현재 프로세스가 즉시 교체됩니다. 열린 파일 객체와 기술자는 플러시
   되지 않으므로, 이러한 열린 파일에 버퍼링 된 데이터가 있으면,
   "exec*" 함수를 호출하기 전에 "sys.stdout.flush()" 또는 "os.fsync()"
   를 사용하여 플러시 해야 합니다.

   "exec*" 함수의 "l" 및 "v" 변형은 명령 줄 인자가 전달되는 방식이 다
   릅니다. "l" 변형은 아마도 코드가 작성될 때 매개 변수의 수가 고정되
   어 있다면 가장 작업하기 쉬운 것입니다; 개별 매개 변수는 단순히
   "execl*()" 함수에 대한 추가 매개 변수가 됩니다. "v" 변형은 매개 변
   수의 개수가 가변적일 때 좋으며, 리스트나 튜플에 들어있는 인자가
   *args* 매개 변수로 전달됩니다. 두 경우 모두, 자식 프로세스에 대한
   인자는 실행 중인 명령의 이름으로 시작해야 하지만, 강제되지는 않습니
   다.

   끝 근처에 "p"가 포함된 변형("execlp()", "execlpe()", "execvp()" 및
   "execvpe()")은 "PATH" 환경 변수를 사용하여 프로그램 *file* 을 찾습
   니다. 환경이 대체 될 때 (다음 단락에서 설명할 "exec*e" 변형 중 하나
   를 사용하여), 새 환경이 "PATH" 변수의 소스로 사용됩니다. 다른 변형
   "execl()", "execle()", "execv()" 및 "execve()"는 "PATH" 변수를 사용
   하여 실행 파일을 찾지 않습니다; *path* 에는 반드시 적절한 절대 또는
   상대 경로가 있어야 합니다.

   "execle()", "execlpe()", "execve()", "execvpe()"의 경우 (모두 "e"로
   끝납니다), *env* 매개 변수는 새 프로세스의 환경 변수를 정의하는 데
   사용되는 매핑이어야 합니다 (이것이 현재 프로세스의 환경 대신 사용됩
   니다); 함수 "execl()", "execlp()", "execv()" 및 "execvp()"는 모두
   새 프로세스가 현재 프로세스의 환경을 상속하게 합니다.

   일부 플랫폼에서 "execve()"의 경우, *path* 는 열린 파일 기술자로도
   지정될 수 있습니다. 이 기능은 여러분의 플랫폼에서 지원되지 않을 수
   있습니다; "os.supports_fd"를 사용하여 사용할 수 있는지를 확인할 수
   있습니다. 사용할 수 없을 때, 이를 사용하면 "NotImplementedError"가
   발생합니다.

   "path", "args", "env"를 인자로 감사 이벤트(auditing event)
   "os.exec"를 발생시킵니다.

   가용성: 유닉스, 윈도우.

   버전 3.3에 추가: "execve()"의 *path*에 열린 파일 기술자를 지정하는
   지원이 추가되었습니다.

   버전 3.6에서 변경: *경로류 객체*를 받아들입니다.

os._exit(n)

   상태 *n*으로 프로세스를 종료합니다. 클린업 처리기를 호출하거나,
   stdio 버퍼를 플러시 하거나 등등은 수행하지 않습니다.

   참고:

     종료하는 표준 방법은 "sys.exit(n)"입니다. "_exit()"는 일반적으로
     "fork()" 이후의 자식 프로세스에서만 사용해야 합니다.

필수 조건은 아니지만, 다음 종료 코드가 정의되어 있으며 "_exit()"와 함
께 사용할 수 있습니다. 이것은 메일 서버의 외부 명령 배달 프로그램과 같
이 파이썬으로 작성된 시스템 프로그램에서 일반적으로 사용됩니다.

참고:

  약간의 차이점이 있어서, 이들 중 일부는 모든 유닉스 플랫폼에서 사용하
  지는 못할 수 있습니다. 이 상수는 하부 플랫폼에서 정의될 때만 정의됩
  니다.

os.EX_OK

   에러가 발생하지 않았음을 나타내는 종료 코드.

   가용성: 유닉스.

os.EX_USAGE

   잘못된 개수의 인자가 제공된 경우처럼, 명령이 잘못 사용되었음을 나타
   내는 종료 코드.

   가용성: 유닉스.

os.EX_DATAERR

   입력 데이터가 잘못되었음을 나타내는 종료 코드.

   가용성: 유닉스.

os.EX_NOINPUT

   입력 파일이 없거나 읽을 수 없음을 나타내는 종료 코드.

   가용성: 유닉스.

os.EX_NOUSER

   지정된 사용자가 존재하지 않음을 나타내는 종료 코드.

   가용성: 유닉스.

os.EX_NOHOST

   지정된 호스트가 존재하지 않음을 나타내는 종료 코드.

   가용성: 유닉스.

os.EX_UNAVAILABLE

   필수 서비스를 사용할 수 없음을 나타내는 종료 코드.

   가용성: 유닉스.

os.EX_SOFTWARE

   내부 소프트웨어 에러가 감지되었음을 나타내는 종료 코드.

   가용성: 유닉스.

os.EX_OSERR

   포크 하거나 파이프를 만들 수 없는 등, 운영 체제 에러가 감지되었음을
   나타내는 종료 코드.

   가용성: 유닉스.

os.EX_OSFILE

   일부 시스템 파일이 없거나, 열 수 없거나, 다른 에러가 있음을 나타내
   는 종료 코드.

   가용성: 유닉스.

os.EX_CANTCREAT

   사용자가 지정한 출력 파일을 만들 수 없음을 나타내는 종료 코드.

   가용성: 유닉스.

os.EX_IOERR

   일부 파일에서 I/O를 수행하는 동안 에러가 발생했음을 나타내는 종료
   코드.

   가용성: 유닉스.

os.EX_TEMPFAIL

   임시 에러가 발생했음을 나타내는 종료 코드. 이는 재시도 가능한 작업
   중에 만들 수 없었던 네트워크 연결과 같이 실제로는 에러가 아닐 수 있
   는 것을 나타냅니다.

   가용성: 유닉스.

os.EX_PROTOCOL

   프로토콜 교환이 불법이거나 유효하지 않거나 이해되지 않았음을 나타내
   는 종료 코드.

   가용성: 유닉스.

os.EX_NOPERM

   작업을 수행할 수 있는 권한이 충분하지 않음을 나타내는 종료 코드 (파
   일 시스템 문제에는 사용하지 않습니다).

   가용성: 유닉스.

os.EX_CONFIG

   어떤 종류의 구성 에러가 발생했음을 나타내는 종료 코드.

   가용성: 유닉스.

os.EX_NOTFOUND

   "항목을 찾을 수 없습니다" 와 같은 것을 의미하는 종료 코드.

   가용성: 유닉스.

os.fork()

   자식 프로세스를 포크 합니다. 자식에서는 "0"을 반환하고, 부모에서는
   자식의 프로세스 ID를 반환합니다. 에러가 발생하면 "OSError"를 일으킵
   니다.

   FreeBSD <= 6.3 및 Cygwin을 포함한 일부 플랫폼은 스레드에서 "fork()"
   를 사용할 때 알려진 문제점이 있습니다.

   인자 없이 감사 이벤트(auditing event) "os.fork"를 발생시킵니다.

   버전 3.8에서 변경: 서브 인터프리터에서 "fork()"를 호출하는 것은 더
   는 지원되지 않습니다 ("RuntimeError"가 발생합니다).

   경고:

     fork()와 함께 SSL 모듈을 사용하는 응용 프로그램의 경우 "ssl"를 참
     조하십시오.

   가용성: 유닉스.

os.forkpty()

   새 의사 터미널을 자식의 제어 터미널로 사용하여 자식 프로세스를 포크
   합니다. "(pid, fd)" 쌍을 반환하는데, 여기서 *pid* 는 자식에서 "0"이
   고, 부모에서는 새 자식의 프로세스 ID이고, *fd* 는 의사 터미널의 마
   스터 단의 파일 기술자입니다. 좀 더 이식성 있는 접근법을 사용하려면,
   "pty" 모듈을 사용하십시오. 에러가 발생하면 "OSError"를 일으킵니다.

   인자 없이 감사 이벤트(auditing event) "os.forkpty"를 발생시킵니다.

   버전 3.8에서 변경: 서브 인터프리터에서 "forkpty()"를 호출하는 것은
   더는 지원되지 않습니다 ("RuntimeError"가 발생합니다).

   가용성: 일부 유닉스.

os.kill(pid, sig)

   프로세스 *pid*에 시그널 *sig*를 보냅니다. 호스트 플랫폼에서 사용할
   수 있는 구체적인 시그널에 대한 상수는 "signal" 모듈에 정의되어 있습
   니다.

   윈도우: "signal.CTRL_C_EVENT" 및 "signal.CTRL_BREAK_EVENT" 시그널은
   같은 콘솔 창을 공유하는 콘솔 프로세스(예를 들어, 일부 자식 프로세스
   )로만 보낼 수 있는 특수 시그널입니다. *sig*에 대한 다른 값은, 프로
   세스가 TerminateProcess API에 의해 무조건 종료되게 하고, 종료 코드
   는 *sig* 로 설정됩니다. 윈도우 버전의 "kill()"은 종료시킬 프로세스
   핸들도 받아들입니다.

   "signal.pthread_kill()"도 참조하십시오.

   "pid", "sig"를 인자로 감사 이벤트(auditing event) "os.kill"을 발생
   시킵니다.

   버전 3.2에 추가: 윈도우 지원.

os.killpg(pgid, sig)

   시그널 *sig* 를 프로세스 그룹 *pgid* 로 보냅니다.

   "pgid", "sig"를 인자로 감사 이벤트(auditing event) "os.killpg"를 발
   생시킵니다.

   가용성: 유닉스.

os.nice(increment)

   프로세스의 "우선도(niceness)"에 *increment* 를 추가합니다. 새로운
   우선도를 반환합니다.

   가용성: 유닉스.

os.plock(op)

   프로그램 세그먼트를 메모리에 잠급니다. ("<sys/lock.h>"에서 정의된)
   *op* 값은 잠기는 세그먼트를 판별합니다.

   가용성: 유닉스.

os.popen(cmd, mode='r', buffering=-1)

   명령 *cmd*와의 파이프 연결을 엽니다. 반환 값은 파이프에 연결된 열린
   파일 객체이며, *mode* 가 "'r'"(기본값)인지 "'w'"인지에 따라 읽거나
   쓸 수 있습니다. *buffering* 인자는 내장 "open()" 함수에서와 같은 의
   미가 있습니다. 반환된 파일 객체는 바이트열이 아닌 텍스트 문자열을
   읽거나 씁니다.

   "close" 메서드는 자식 프로세스가 성공적으로 종료되면 "None"을 반환
   하고, 에러가 있으면 자식 프로세스가 반환한 코드를 반환합니다. POSIX
   시스템에서, 반환 코드가 양수면, 프로세스의 반환 값을 1바이트 왼쪽으
   로 시프트 한 값을 나타냅니다. 반환 코드가 음수면, 음의 반환 코드로
   주어진 시그널에 의해 강제 종료된 것입니다. 예를 들어, 자식 프로세스
   가 죽었을(kill) 때 반환 값은 "- signal.SIGKILL" 일 수 있습니다. 윈
   도우 시스템에서, 반환 값은 자식 프로세스의 부호 있는 정수 반환 코드
   를 포함합니다.

   이것은 "subprocess.Popen"를 사용하여 구현됩니다; 자식 프로세스를 관
   리하고 통신하는 보다 강력한 방법에 대해서는 이 클래스의 설명서를 참
   조하십시오.

os.posix_spawn(path, argv, env, *, file_actions=None, setpgroup=None, resetids=False, setsid=False, setsigmask=(), setsigdef=(), scheduler=None)

   파이썬에서 사용하기 위해 "posix_spawn()" C 라이브러리 API를 감쌉니
   다.

   대부분 사용자는 "posix_spawn()" 대신 "subprocess.run()"을 사용해야
   합니다.

   위치 전용 인자 *path*, *args* 및 *env*는 "execve()"와 유사합니다.

   The *path* parameter is the path to the executable file.  The
   *path* should contain a directory.  Use "posix_spawnp()" to pass an
   executable file without directory.

   *file_actions* 인자는 C 라이브러리 구현의 "fork()"와 "exec()" 단계
   사이의 자식 프로세스에서 특정 파일 기술자에 취할 동작을 설명하는 튜
   플의 시퀀스 일 수 있습니다. 각 튜플의 첫 번째 항목은 나머지 튜플 요
   소를 설명하는, 아래에 나열된 세 가지 형 지시자 중 하나여야 합니다:

   os.POSIX_SPAWN_OPEN

      ("os.POSIX_SPAWN_OPEN", *fd*, *path*, *flags*, *mode*)

      "os.dup2(os.open(path, flags, mode), fd)"를 수행합니다.

   os.POSIX_SPAWN_CLOSE

      ("os.POSIX_SPAWN_CLOSE", *fd*)

      "os.close(fd)"를 수행합니다.

   os.POSIX_SPAWN_DUP2

      ("os.POSIX_SPAWN_DUP2", *fd*, *new_fd*)

      "os.dup2(fd, new_fd)"를 수행합니다.

   이 튜플은 "posix_spawn()" 호출 자체를 준비하는 데 사용되는 C 라이브
   러리 "posix_spawn_file_actions_addopen()",
   "posix_spawn_file_actions_addclose()" 및
   "posix_spawn_file_actions_adddup2()" API 호출에 해당합니다.

   *setpgroup* 인자는 자식의 프로세스 그룹을 지정한 값으로 설정합니다.
   지정된 값이 0이면, 자식의 프로세스 그룹 ID가 프로세스 ID와 같아집니
   다. *setpgroup* 값을 설정하지 않으면, 자식 프로세스는 부모의 프로세
   스 그룹 ID를 상속받습니다. 이 인자는 C 라이브러리
   "POSIX_SPAWN_SETPGROUP" 플래그에 해당합니다.

   *resetids* 인자가 "True"이면, 자식 프로세스의 유효한(effective) UID
   와 GID를 부모 프로세스의 실제(real) UID와 GID로 재설정합니다. 이 인
   자가 "False"이면, 자식은 부모의 유효한(effective) UID와 GID를 유지
   합니다. 두 경우 모두, 실행 파일에서 set-user-ID와 set-group-ID 권한
   비트가 활성화되었으면, 해당 효과가 유효한(effective) UID와 GID 설정
   보다 우선 적용됩니다. 이 인자는 C 라이브러리 "POSIX_SPAWN_RESETIDS"
   플래그에 해당합니다.

   *setsid* 인자가 "True"이면, *posix_spawn*을 위한 새 세션 ID를 만듭
   니다. *setsid*는 "POSIX_SPAWN_SETSID"나 "POSIX_SPAWN_SETSID_NP" 플
   래그를 요구합니다. 그렇지 않으면, "NotImplementedError"가 발생합니
   다.

   *setsigmask* 인자는 시그널 마스크를 지정된 시그널 집합으로 설정합니
   다. 매개 변수가 사용되지 않으면, 자식은 부모의 시그널 마스크를 상속
   받습니다. 이 인자는 C 라이브러리 "POSIX_SPAWN_SETSIGMASK" 플래그에
   해당합니다.

   *sigdef* 인자는 지정된 집합에 있는 모든 시그널의 처리를 재설정합니
   다. 이 인자는 C 라이브러리 "POSIX_SPAWN_SETSIGDEF" 플래그에 해당합
   니다.

   *scheduler* 인자는 (선택적) 스케줄러 정책과 스케줄러 매개 변수가 있
   는 "sched_param" 인스턴스를 포함하는 튜플이어야 합니다. 스케줄러 정
   책 자리의 "None" 값은 제공되지 않음을 나타냅니다. 이 인자는 C 라이
   브러리 "POSIX_SPAWN_SETSCHEDPARAM"과 "POSIX_SPAWN_SETSCHEDULER" 플
   래그의 조합입니다.

   "path", "argv", "env"를 인자로 감사 이벤트(auditing event)
   "os.posix_spawn"을 발생시킵니다.

   버전 3.8에 추가.

   가용성: 유닉스.

os.posix_spawnp(path, argv, env, *, file_actions=None, setpgroup=None, resetids=False, setsid=False, setsigmask=(), setsigdef=(), scheduler=None)

   파이썬에서 사용할 "posix_spawnp()" C 라이브러리 API를 감쌉니다.

   시스템이 ("execvp(3)"과 같은 방식으로) "PATH" 환경 변수에 의해 지정
   된 디렉터리 목록에서 *실행* 파일을 검색한다는 점을 제외하고는
   "posix_spawn()"과 유사합니다.

   "path", "argv", "env"를 인자로 감사 이벤트(auditing event)
   "os.posix_spawn"을 발생시킵니다.

   버전 3.8에 추가.

   가용성: "posix_spawn()" 설명서를 참조하십시오.

os.register_at_fork(*, before=None, after_in_parent=None, after_in_child=None)

   "os.fork()" 또는 유사한 프로세스 복제 API를 사용하여 새 자식 프로세
   스가 포크 될 때 실행될 콜러블들을 등록합니다. 매개 변수는 선택적이
   며 키워드 전용입니다. 각각은 다른 호출 지점을 지정합니다.

   * *before* 는 자식 프로세스를 포크 하기 전에 호출되는 함수입니다.

   * *after_in_parent* 는 자식 프로세스를 포크 한 후에 부모 프로세스에
     서 호출되는 함수입니다.

   * *after_in_child* 는 자식 프로세스에서 호출되는 함수입니다.

   이러한 호출은 제거가 파이썬 인터프리터로 반환될 것으로 예상되는 경
   우에만 수행됩니다. 일반적인 "subprocess" 실행은 자식이 인터프리터로
   재진입하지 않기 때문에, 이 호출들이 일어나지 않습니다.

   포크 이전에 실행되도록 등록된 함수는 등록 역순으로 실행됩니다. 포크
   후에 실행되도록 등록된 함수(부모나 자식 모두)는 등록 순서로 호출됩
   니다.

   제삼자 C 코드에 의한 "fork()" 호출은, 그것이 명시적으로
   "PyOS_BeforeFork()", "PyOS_AfterFork_Parent()" 및
   "PyOS_AfterFork_Child()"를 호출하지 않는 한, 이 함수들을 호출하지
   않습니다.

   함수 등록을 취소할 방법은 없습니다.

   가용성: 유닉스.

   버전 3.7에 추가.

os.spawnl(mode, path, ...)
os.spawnle(mode, path, ..., env)
os.spawnlp(mode, file, ...)
os.spawnlpe(mode, file, ..., env)
os.spawnv(mode, path, args)
os.spawnve(mode, path, args, env)
os.spawnvp(mode, file, args)
os.spawnvpe(mode, file, args, env)

   새 프로세스에서 프로그램 *path* 를 실행합니다.

   ("subprocess" 모듈은 새 프로세스를 생성하고 결과를 조회하는데, 더욱
   강력한 기능을 제공합니다; 이 모듈을 사용하는 것이 이 함수들을 사용
   하는 것보다 더 바람직합니다. 특히 Replacing Older Functions with
   the subprocess Module 섹션을 확인하십시오.)

   *mode* 가 "P_NOWAIT"면, 이 함수는 새 프로세스의 프로세스 ID를 반환
   합니다; *mode*가 "P_WAIT"면, 종료 코드(정상적으로 종료했을 때)나
   "-signal"(*signal*은 프로세스를 죽인 시그널입니다)을 반환합니다. 윈
   도우에서, 프로세스 ID는 실제로 프로세스 핸들이므로, "waitpid()" 함
   수에 사용할 수 있습니다.

   VxWorks에서, 이 함수는 새로운 프로세스가 죽을(kill) 때 "-signal"을
   반환하지 않습니다. 대신 OSError 예외가 발생합니다.

   "spawn*" 함수의 "l" 및 "v" 변형은 명령 줄 인자가 전달되는 방식이 다
   릅니다. "l" 변형은 아마도 코드가 작성될 때 매개 변수의 수가 고정되
   어 있다면 가장 작업하기 쉬운 것입니다; 개별 매개 변수는 단순히
   "spawnl*()" 함수에 대한 추가 매개 변수가 됩니다. "v" 변형은 매개 변
   수의 개수가 가변적일 때 좋으며, 리스트나 튜플에 들어있는 인자가
   *args* 매개 변수로 전달됩니다. 두 경우 모두, 자식 프로세스에 대한
   인자는 반드시 실행 중인 명령의 이름으로 시작해야 합니다.

   끝 근처에 두 번째 "p"가 포함된 변형("spawnlp()", "spawnlpe()",
   "spawnvp()" 및 "spawnvpe()")은 "PATH" 환경 변수를 사용하여 프로그램
   *file* 을 찾습니다. 환경이 대체 될 때 (다음 단락에서 설명할
   "spawn*e" 변형 중 하나를 사용하여), 새 환경이 "PATH" 변수의 소스로
   사용됩니다. 다른 변형 "spawnl()", "spawnle()", "spawnv()" 및
   "spawnve()"는 "PATH" 변수를 사용하여 실행 파일을 찾지 않습니다;
   *path* 에는 반드시 적절한 절대 또는 상대 경로가 있어야 합니다.

   "spawnle()", "spawnlpe()", "spawnve()" 및 "spawnvpe()"의 경우 (모두
   "e"로 끝납니다), *env* 매개 변수는 새 프로세스의 환경 변수를 정의하
   는 데 사용되는 매핑이어야 합니다 (이것이 현재 프로세스의 환경 대신
   사용됩니다); 함수 "spawnl()", "spawnlp()", "spawnv()" 및
   "spawnvp()"는 모두 새 프로세스가 현재 프로세스의 환경을 상속하게 합
   니다. *env* 딕셔너리의 키와 값은 반드시 문자열이어야 함에 주의하십
   시오; 잘못된 키나 값은 반환 값 "127"로 함수가 실패하게 합니다.

   예를 들어, "spawnlp()" 및 "spawnvpe()"에 대한 다음 호출은 동등합니
   다:

      import os
      os.spawnlp(os.P_WAIT, 'cp', 'cp', 'index.html', '/dev/null')

      L = ['cp', 'index.html', '/dev/null']
      os.spawnvpe(os.P_WAIT, 'cp', L, os.environ)

   "mode", "path", "args", "env"를 인자로 감사 이벤트(auditing event)
   "os.spawn"을 발생시킵니다.

   가용성: 유닉스, 윈도우. "spawnlp()", "spawnlpe()", "spawnvp()",
   "spawnvpe()"는 윈도우에서 사용할 수 없습니다. "spawnle()"와
   "spawnve()"는 윈도우에서 스레드 안전하지 않습니다; 대신
   "subprocess" 모듈을 사용하도록 권고합니다.

   버전 3.6에서 변경: *경로류 객체*를 받아들입니다.

os.P_NOWAIT
os.P_NOWAITO

   "spawn*" 계열 함수의 *mode* 매개 변수에 사용할 수 있는 값. 이 값 중
   하나가 주어지면, "spawn*()" 함수는 새로운 프로세스가 생성되자마자
   프로세스 ID를 반환 값으로 사용하여 반환됩니다.

   가용성: 유닉스, 윈도우.

os.P_WAIT

   "spawn*" 계열 함수의 *mode* 매개 변수에 사용할 수 있는 값. 이것이
   *mode* 로 주어지면, "spawn*()" 함수는 새 프로세스가 완료될 때까지
   반환되지 않고, 실행이 성공한 프로세스의 종료 코드를 반환하거나, 시
   그널이 프로세스를 죽이면 "-signal"을 반환합니다.

   가용성: 유닉스, 윈도우.

os.P_DETACH
os.P_OVERLAY

   "spawn*" 계열 함수의 *mode* 매개 변수에 사용할 수 있는 값. 이들은
   위에 나열된 것보다 이식성이 낮습니다. "P_DETACH"는 "P_NOWAIT"와 비
   슷하지만, 새 프로세스는 호출 프로세스의 콘솔에서 분리됩니다.
   "P_OVERLAY"가 사용되면, 현재 프로세스가 대체됩니다; "spawn*" 함수가
   반환되지 않습니다.

   가용성: 윈도우.

os.startfile(path[, operation])

   연관된 응용 프로그램으로 파일을 시작합니다.

   *operation* 이 지정되지 않았거나 "'open'"이면, 윈도우 탐색기에서 파
   일을 두 번 클릭하거나, 대화형 명령 셸에서 **start** 명령에 인자로
   파일명을 지정하는 것과 같은 역할을 합니다: 파일의 확장자와 연관된 (
   있다면) 응용 프로그램으로 파일이 열립니다.

   다른 *operation* 이 주어지면, 파일로 수행해야 할 작업을 지정하는 "
   명령 동사"여야 합니다. 마이크로소프트에서 문서화 한 일반적인 동사는
   "'print'" 와 "'edit'" (파일에 사용됨) 및 "'explore'" 와 "'find'" (
   디렉터리에 사용됨)입니다.

   "startfile()"는 연관된 응용 프로그램이 시작되자마자 반환합니다. 응
   용 프로그램이 닫히기를 기다리는 옵션과 응용 프로그램의 종료 상태를
   검색할 방법이 없습니다. *path* 매개 변수는 현재 디렉터리에 상대적입
   니다. 절대 경로를 사용하려면 첫 번째 문자가 슬래시 ("'/'")가 아닌지
   확인하십시오; 하부 Win32 "ShellExecute()" 함수는 첫 번째 문자가 슬
   래시면 작동하지 않습니다. "os.path.normpath()" 함수를 사용하여 경로
   가 Win32 용으로 올바르게 인코딩되도록 하십시오.

   인터프리터 시작 오버헤드를 줄이기 위해, Win32 "ShellExecute()" 함수
   는 이 함수가 처음 호출될 때까지 결정(resolve)되지 않습니다. 함수를
   결정할 수 없으면 "NotImplementedError"가 발생합니다.

   "path", "operation"을 인자로 감사 이벤트(auditing event)
   "os.startfile"을 발생시킵니다.

   가용성: 윈도우.

os.system(command)

   서브 셸에서 명령(문자열)을 실행합니다. 이것은 표준 C 함수
   "system()"를 호출하여 구현되며, 같은 제한이 있습니다. "sys.stdin"
   등의 변경 사항은 실행된 명령의 환경에 반영되지 않습니다. *command*
   가 출력을 생성하면, 인터프리터 표준 출력 스트림으로 전송됩니다.

   유닉스에서, 반환 값은 "wait()"에 지정된 형식으로 인코딩된 프로세스
   의 종료 상태입니다. POSIX는 C "system()" 함수의 반환 값의 의미를 지
   정하지 않으므로, 파이썬 함수의 반환 값은 시스템 종속적입니다.

   윈도우에서, 반환 값은 *command*를 실행한 후 시스템 셸에서 반환한 값
   입니다. 셸은 윈도우 환경 변수 "COMSPEC"에 의해 제공됩니다: 보통
   **cmd.exe**인데, 명령 실행의 종료 상태를 반환합니다; 기본이 아닌 셸
   을 사용하는 시스템에서는 셸 설명서를 참조하십시오.

   "subprocess" 모듈은 새 프로세스를 생성하고 결과를 조회하는데, 더욱
   강력한 기능을 제공합니다; 이 모듈을 사용하는 것이 이 함수들을 사용
   하는 것보다 더 바람직합니다. "subprocess" 설명서의 Replacing Older
   Functions with the subprocess Module 섹션에서 유용한 조리법을 확인
   하십시오.

   "command"를 인자로 감사 이벤트(auditing event) "os.system"을 발생시
   킵니다.

   가용성: 유닉스, 윈도우.

os.times()

   현재 전역 프로세스 시간을 반환합니다. 반환 값은 5가지 어트리뷰트를
   가진 객체입니다:

   * "user" - 사용자 시간

   * "system" - 시스템 시간

   * "children_user" - 모든 자식 프로세스의 사용자 시간

   * "children_system" - 모든 자식 프로세스의 시스템 시간

   * "elapsed" - 과거의 고정된 시점 이후 실제 경과 시간

   과거 호환성을 위해, 이 객체는 "user", "system", "children_user",
   "children_system" 및 "elapsed"가 이 순서로 포함된 5-튜플처럼 작동합
   니다.

   유닉스 매뉴얼 페이지 *times(2)*와 유닉스에서는 *times(3)* 매뉴얼 페
   이지 또는 윈도우에서는 the GetProcessTimes MSDN을 참조하십시오. 윈
   도우에서는, "user" 및 "system" 만 알려져 있습니다; 다른 어트리뷰트
   는 0입니다.

   가용성: 유닉스, 윈도우.

   버전 3.3에서 변경: 반환형이 튜플에서 이름이 지정된 어트리뷰트를 가
   진 튜플류 객체로 변경되었습니다.

os.wait()

   자식 프로세스가 완료될 때까지 기다렸다가, pid 및 종료 상태 표시를
   포함하는 튜플을 반환합니다: 종료 상태 표시는 16비트 숫자인데, 하위
   바이트가 프로세스를 죽인 시그널 번호이고, 상위 바이트가 종료 상태(
   시그널 번호가 0이면)입니다; 코어 파일이 생성되면 하위 바이트의 상위
   비트가 설정됩니다.

   가용성: 유닉스.

os.waitid(idtype, id, options)

   하나 이상의 자식 프로세스가 완료될 때까지 기다립니다. *idtype* 은
   "P_PID", "P_PGID" 또는 "P_ALL"이 될 수 있습니다. *id* 는 기다릴 pid
   를 지정합니다. *options*는 하나 이상의 "WEXITED", "WSTOPPED" 또는
   "WCONTINUED"의 OR로 구성되며, 추가로 "WNOHANG" 또는 "WNOWAIT"와 OR
   될 수 있습니다. 반환 값은 "siginfo_t" 구조체에 포함된 데이터(즉,
   "si_pid", "si_uid", "si_signo", "si_status", "si_code")를 나타내는
   객체이거나, "WNOHANG"가 지정되고 대기 가능한 상태의 자식이 없으면
   "None"입니다.

   가용성: 유닉스.

   버전 3.3에 추가.

os.P_PID
os.P_PGID
os.P_ALL

   이것들은 "waitid()"의 *idtype* 에 사용 가능한 값입니다. *id* 가 어
   떻게 해석되는지에 영향을 미칩니다.

   가용성: 유닉스.

   버전 3.3에 추가.

os.WEXITED
os.WSTOPPED
os.WNOWAIT

   기다릴 자식 시그널을 지정하는, "waitid()"의 *options* 에서 사용할
   수 있는 플래그.

   가용성: 유닉스.

   버전 3.3에 추가.

os.CLD_EXITED
os.CLD_DUMPED
os.CLD_TRAPPED
os.CLD_CONTINUED

   이것은 "waitid()"에 의해 반환된 결과에서 "si_code"의 가능한 값입니
   다.

   가용성: 유닉스.

   버전 3.3에 추가.

os.waitpid(pid, options)

   이 함수의 세부 사항은 유닉스 및 윈도우에서 다릅니다.

   유닉스에서: 프로세스 ID *pid*에 의해 주어진 자식 프로세스의 완료를
   기다리고, 프로세스 ID와 종료 상태 표시("wait()"처럼 인코딩됨)를 포
   함하는 튜플을 반환합니다. 호출의 의미는 정수 *options* 의 값에 영향
   을 받는데, 일반 작업의 경우 "0" 이어야 합니다.

   *pid* 가 "0"보다 크면, "waitpid()"는 해당 프로세스에 대한 상태 정보
   를 요청합니다. *pid* 가 "0"이면, 현재 프로세스의 프로세스 그룹에 있
   는 모든 자식의 상태를 요청합니다. *pid* 가 "-1"이면, 현재 프로세스
   의 모든 자식의 상태를 요청합니다. *pid* 가 "-1"보다 작으면, 프로세
   스 그룹 "-pid"(*pid* 의 절댓값)에 있는 모든 프로세스의 상태를 요청
   합니다.

   시스템 호출이 -1을 반환하면, "OSError"가 errno 값으로 발생합니다.

   윈도우에서: 프로세스 핸들 *pid*로 지정된 프로세스가 완료될 때까지
   기다리고, *pid*와 종료 상태를 8비트 왼쪽으로 시프트 한 값을 포함하
   는 튜플을 반환합니다 (시프팅이 함수를 더 이식성 있게 만듭니다). "0"
   보다 작거나 같은 *pid* 는 윈도우에서 특별한 의미가 없고 예외가 발생
   합니다. 정수 *options* 의 값은 아무 효과가 없습니다. *pid* 는 id가
   알려진 모든 프로세스를 가리킬 수 있습니다, 반드시 자식 프로세스일
   필요는 없습니다. "P_NOWAIT"로 호출된 "spawn*" 함수는 적절한 프로세
   스 핸들을 반환합니다.

   버전 3.5에서 변경: 시스템 호출이 인터럽트 되고 시그널 처리기가 예외
   를 발생시키지 않으면, 함수는 이제 "InterruptedError" 예외를 일으키
   는 대신 시스템 호출을 재시도합니다 (이유는 **PEP 475**를 참조하세요
   ).

os.wait3(options)

   "waitpid()"와 비슷하지만, 프로세스 ID 인자가 제공되지 않고 자식 프
   로세스 ID, 종료 상태 표시 및 자원 사용 정보가 포함된 3-요소 튜플이
   반환된다는 점이 다릅니다. 자원 사용 정보에 대한 자세한 내용은
   "resource"."getrusage()"를 참조하십시오. 옵션 인자는 "waitpid()" 및
   "wait4()"에 제공된 인자와 같습니다.

   가용성: 유닉스.

os.wait4(pid, options)

   "waitpid()"와 비슷하지만, 자식 프로세스 ID, 종료 상태 표시 및 자원
   사용 정보가 포함된 3-요소 튜플이 반환된다는 점이 다릅니다. 자원 사
   용 정보에 대한 자세한 내용은 "resource"."getrusage()"를 참조하십시
   오. "wait4()"의 인자는 "waitpid()"와 같습니다.

   가용성: 유닉스.

os.WNOHANG

   자식 프로세스 상태를 즉시 사용할 수 없으면, "waitpid()"가 즉시 반환
   하는 옵션입니다. 이 경우 이 함수는 "(0, 0)"를 반환합니다.

   가용성: 유닉스.

os.WCONTINUED

   이 옵션은 자식 프로세스의 상태가 마지막으로 보고된 이후에 작업 제어
   중지에서 재개한 경우 보고되도록 합니다.

   가용성: 일부 유닉스 시스템.

os.WUNTRACED

   이 옵션은 자식 프로세스가 중지되었지만, 현재 상태가 중지된 이후 보
   고되지 않았으면 보고되게 합니다.

   가용성: 유닉스.

다음 함수들은 "system()", "wait()" 또는 "waitpid()"에 의해 반환된 프로
세스 상태 코드를 매개 변수로 받아들입니다. 이것들은 프로세스의 처리를
결정하는 데 사용될 수 있습니다.

os.WCOREDUMP(status)

   프로세스에 대해 코어 덤프가 생성되었으면 "True"를 반환하고, 그렇지
   않으면 "False"를 반환합니다.

   이 함수는 "WIFSIGNALED()"가 참일 때만 사용해야 합니다.

   가용성: 유닉스.

os.WIFCONTINUED(status)

   중지된 자식이 "SIGCONT" 의 전달로 인해 재개했으면 (작업 제어 중지에
   서 프로세스가 재개했으면) "True"를 반환하고, 그렇지 않으면 "False"
   를 반환합니다.

   "WCONTINUED" 옵션을 참조하십시오.

   가용성: 유닉스.

os.WIFSTOPPED(status)

   시그널의 전달로 인해 프로세스가 중지되었으면 "True"를 반환하고, 그
   렇지 않으면 "False"를 반환합니다.

   "WIFSTOPPED()"는 "WUNTRACED" 옵션을 사용하여 "waitpid()"을 호출했거
   나 프로세스가 추적되고 있을 때만 "True"를 반환합니다 (*ptrace(2)*를
   참조하십시오).

   가용성: 유닉스.

os.WIFSIGNALED(status)

   시그널로 인해 프로세스가 종료되었으면 "True"를 반환하고, 그렇지 않
   으면 "False"를 반환합니다.

   가용성: 유닉스.

os.WIFEXITED(status)

   프로세스가 정상 종료했으면 "True"를 반환합니다, 즉 "exit()"나
   "_exit()"를 호출했거나, "main()"에서 반환하여; 그렇지 않으면
   "False"를 반환합니다.

   가용성: 유닉스.

os.WEXITSTATUS(status)

   프로세스 종료 상태를 반환합니다.

   이 함수는 "WIFEXITED()"가 참일 때만 사용해야 합니다.

   가용성: 유닉스.

os.WSTOPSIG(status)

   프로세스를 멈추게 한 시그널을 반환합니다.

   이 함수는 "WIFSTOPPED()"가 참일 때만 사용해야 합니다.

   가용성: 유닉스.

os.WTERMSIG(status)

   프로세스를 종료시킨 시그널의 번호를 반환합니다.

   이 함수는 "WIFSIGNALED()"가 참일 때만 사용해야 합니다.

   가용성: 유닉스.


스케줄러에 대한 인터페이스
==========================

이 함수들은 운영 체제가 프로세스에 CPU 시간을 할당하는 방법을 제어합니
다. 일부 유닉스 플랫폼에서만 사용할 수 있습니다. 자세한 내용은 유닉스
매뉴얼 페이지를 참조하십시오.

버전 3.3에 추가.

다음 스케줄 정책은 운영 체제에서 지원하는 경우 공개됩니다.

os.SCHED_OTHER

   기본 스케줄 정책.

os.SCHED_BATCH

   컴퓨터의 나머지 부분에서 반응성을 유지하려고 하는 CPU 집약적인 프로
   세스를 위한 스케줄 정책.

os.SCHED_IDLE

   매우 낮은 우선순위의 배경 작업에 대한 스케줄 정책.

os.SCHED_SPORADIC

   간헐적인 서버 프로그램을 위한 스케줄 정책.

os.SCHED_FIFO

   선입 선출 (First In First Out) 스케줄 정책.

os.SCHED_RR

   라운드 로빈 스케줄 정책.

os.SCHED_RESET_ON_FORK

   이 플래그는 다른 스케줄 정책과 OR 될 수 있습니다. 이 플래그가 설정
   되어있는 프로세스가 포크 할 때, 자식의 스케줄링 정책 및 우선순위가
   기본값으로 재설정됩니다.

class os.sched_param(sched_priority)

   이 클래스는 "sched_setparam()", "sched_setscheduler()", 및
   "sched_getparam()"에서 사용되는 튜닝 가능한 스케줄 파라미터를 나타
   냅니다. 불변입니다.

   현재, 가능한 매개 변수는 하나뿐입니다:

   sched_priority

      스케줄 정책의 스케줄 우선순위.

os.sched_get_priority_min(policy)

   *policy*의 최소 우선순위 값을 가져옵니다. *policy* 는 위의 스케줄
   정책 상수 중 하나입니다.

os.sched_get_priority_max(policy)

   *policy*의 최대 우선순위 값을 가져옵니다. *policy* 는 위의 스케줄
   정책 상수 중 하나입니다.

os.sched_setscheduler(pid, policy, param)

   PID가 *pid*인 프로세스의 스케줄 정책을 설정합니다. *pid* 가 0이면,
   호출하는 프로세스를 의미합니다. *policy* 는 위의 스케줄 정책 상수
   중 하나입니다. *param* 은 "sched_param" 인스턴스입니다.

os.sched_getscheduler(pid)

   PID가 *pid*인 프로세스의 스케줄 정책을 반환합니다. *pid* 가 0이면,
   호출하는 프로세스를 의미합니다. 결과는 위의 스케줄 정책 상수 중 하
   나입니다.

os.sched_setparam(pid, param)

   PID가 *pid*인 프로세스의 스케줄 매개 변수를 설정합니다. *pid* 가 0
   이면 호출하는 프로세스를 의미합니다. *param* 은 "sched_param" 인스
   턴스입니다.

os.sched_getparam(pid)

   PID가 *pid*인 프로세스의 스케줄 매개 변수를 "sched_param" 인스턴스
   로 반환합니다. *pid* 가 0이면 호출하는 프로세스를 의미합니다.

os.sched_rr_get_interval(pid)

   PID가 *pid*인 프로세스의 라운드 로빈 퀀텀을 초 단위로 반환합니다.
   *pid* 가 0이면 호출하는 프로세스를 의미합니다.

os.sched_yield()

   자발적으로 CPU를 양도합니다.

os.sched_setaffinity(pid, mask)

   PID가 *pid*인 프로세스(또는 0이면 현재 프로세스)를 CPU 집합으로 제
   한합니다. *mask* 는 프로세스가 제한되어야 하는 CPU 집합을 나타내는
   정수의 이터러블입니다.

os.sched_getaffinity(pid)

   PID가 *pid*인 프로세스(또는 0이면 현재 프로세스)가 제한되는 CPU 집
   합을 반환합니다.


기타 시스템 정보
================

os.confstr(name)

   문자열 값 시스템 구성 값을 반환합니다. *name* 은 조회할 구성 값을
   지정합니다; 정의된 시스템 값의 이름인 문자열일 수 있습니다; 이 이름
   은 여러 표준(POSIX, 유닉스 95, 유닉스 98 및 기타)에서 지정됩니다.
   일부 플랫폼은 추가 이름도 정의합니다. 호스트 운영 체제에 알려진 이
   름은 "confstr_names" 딕셔너리의 키로 제공됩니다. 해당 매핑에 포함되
   지 않은 구성 변수를 위해, *name*에 정수를 전달하는 것도 허용됩니다.

   *name* 으로 지정된 구성 값이 정의되어 있지 않으면, "None"이 반환됩
   니다.

   *name* 이 문자열이고 알 수 없으면, "ValueError"가 발생합니다.
   *name*에 대한 특정 값이 호스트 시스템에서 지원되지 않으면,
   "confstr_names"에 포함되어 있어도, 에러 번호 "errno.EINVAL"로
   "OSError"가 발생합니다.

   가용성: 유닉스.

os.confstr_names

   "confstr()"에서 허용하는 이름을 호스트 운영 체제가 해당 이름에 대해
   정의한 정숫값으로 매핑하는 딕셔너리입니다. 이것은 시스템에 알려진
   이름 집합을 판별하는 데 사용될 수 있습니다.

   가용성: 유닉스.

os.cpu_count()

   시스템의 CPU 수를 반환합니다. 파악할 수 없으면, "None"을 반환합니다
   .

   이 숫자는 현재 프로세스에서 사용할 수 있는 CPU 수와 같지 않습니다.
   사용 가능한 CPU 수는 "len(os.sched_getaffinity(0))"로 얻을 수 있습
   니다.

   버전 3.4에 추가.

os.getloadavg()

   마지막 1, 5, 15분에 걸쳐 평균한 시스템 실행 대기열의 프로세스 수를
   반환하거나, 로드 평균을 얻을 수 없으면, "OSError"를 발생시킵니다.

   가용성: 유닉스.

os.sysconf(name)

   정숫값 시스템 구성 값을 반환합니다. *name* 으로 지정된 구성 값이 정
   의되어 있지 않으면, "-1"이 반환됩니다. "confstr()"의 *name* 매개 변
   수에 관한 주석은 여기에도 적용됩니다; 알려진 이름에 대한 정보를 제
   공하는 딕셔너리는 "sysconf_names"에 의해 제공됩니다.

   가용성: 유닉스.

os.sysconf_names

   "sysconf()"에서 허용하는 이름을 호스트 운영 체제가 해당 이름에 대해
   정의한 정숫값으로 매핑하는 딕셔너리입니다. 이것은 시스템에 알려진
   이름 집합을 판별하는 데 사용될 수 있습니다.

   가용성: 유닉스.

다음 데이터값들은 경로 조작 연산을 지원하는 데 사용됩니다. 이는 모든
플랫폼에서 정의됩니다.

경로명에 대한 고수준 연산은 "os.path" 모듈에서 정의됩니다.

os.curdir

   현재 디렉터리를 가리키기 위해 운영 체제에서 사용하는 상수 문자열.
   이것은 윈도우 및 POSIX의 경우 "'.'"입니다. "os.path"를 통해서도 제
   공됩니다.

os.pardir

   부모 디렉터리를 가리키기 위해 운영 체제에서 사용하는 상수 문자열입
   니다. 이것은 윈도우 및 POSIX의 경우 "'..'"입니다. "os.path"를 통해
   서도 제공됩니다.

os.sep

   경로명 구성 요소를 분리하기 위해 운영 체제에서 사용하는 문자. 이것
   은 POSIX의 경우 "'/'"이고, 윈도우의 경우 "'\\'"입니다. 이것을 아는
   것만으로는 경로명을 구문 분석하거나 이어붙일 수는 없습니다만 ---
   "os.path.split()"와 "os.path.join()"를 사용하세요 --- 가끔 유용합니
   다. "os.path"를 통해서도 제공됩니다.

os.altsep

   경로명 구성 요소를 분리하기 위해 운영 체제에서 사용하는 대체 문자이
   거나, 단 하나의 구분 문자만 있는 경우 "None"입니다. "sep"가 백 슬래
   시인 윈도우 시스템에서는 "'/'"로 설정됩니다. "os.path"를 통해서도
   제공됩니다.

os.extsep

   기본 파일명과 확장자를 구분하는 문자; 예를 들어, "os.py"에서 "'.'".
   "os.path"를 통해서도 제공됩니다.

os.pathsep

   검색 경로 구성 요소("PATH"에서와 같이)를 분리하기 위해 운영 체제에
   서 관습적으로 사용하는 문자, 가령 POSIX의 "':'" 또는 윈도우의
   "';'". "os.path"를 통해서도 제공됩니다.

os.defpath

   환경에 "'PATH'" 키가 없을 때, "exec*p*" 및 "spawn*p*"에서 사용하는
   기본 검색 경로. "os.path"를 통해서도 제공됩니다.

os.linesep

   현재 플랫폼에서 행을 분리(또는 종료)하는 데 사용되는 문자열. 이는
   POSIX의 "'\n'"와 같은 단일 문자이거나, 윈도우의 "'\r\n'"와 같은 여
   러 문자일 수 있습니다. 텍스트 모드로 열린(기본값) 파일에 쓸 때 줄
   종결자로 *os.linesep*를 사용하지 마십시오; 대신 모든 플랫폼에서 단
   일 "'\n'"를 사용하십시오.

os.devnull

   널(null) 장치의 파일 경로. 예를 들어: POSIX의 경우 "'/dev/null'",
   윈도우의 경우 "'nul'". "os.path"를 통해서도 제공됩니다.

os.RTLD_LAZY
os.RTLD_NOW
os.RTLD_GLOBAL
os.RTLD_LOCAL
os.RTLD_NODELETE
os.RTLD_NOLOAD
os.RTLD_DEEPBIND

   "setdlopenflags()" 및 "getdlopenflags()" 함수에 사용하는 플래그. 각
   플래그가 의미하는 바는 유닉스 매뉴얼 페이지 *dlopen(3)*를 참조하십
   시오.

   버전 3.3에 추가.


난수
====

os.getrandom(size, flags=0)

   최대 *size* 크기의 난수 바이트열을 업습니다. 이 함수는 요청한 것보
   다 짧은 바이트열를 반환할 수 있습니다.

   이 바이트열은 사용자 공간 난수 발생기를 시드 하거나 암호화 목적으로
   사용할 수 있습니다.

   "getrandom()"는 장치 드라이버 및 기타 환경 소음원에서 수집한 엔트로
   피에 의존합니다. 대량의 데이터를 불필요하게 읽는 것은 "/dev/random"
   및 "/dev/urandom" 장치의 다른 사용자에게 부정적인 영향을 미칩니다.

   flags 인자는 다음 값 중 0개 이상의 값들과 함께 OR 될 수 있는 비트
   마스크입니다: "os.GRND_RANDOM" 및 "GRND_NONBLOCK".

   리눅스 getrandom() 매뉴얼 페이지도 참조하십시오.

   가용성: 리눅스 3.17 이상.

   버전 3.6에 추가.

os.urandom(size)

   암호화에 적합한 *size* 크기의 난수 바이트열을 돌려줍니다.

   이 함수는 OS 종속적인 임의성 소스에서 난수 바이트열을 반환합니다.
   반환된 데이터는 암호화 응용에 충분하도록 예측할 수 없어야 하지만,
   정확한 품질은 OS 구현에 따라 달라집니다.

   리눅스에서, "getrandom()" 시스템 호출을 사용할 수 있으면, 블로킹 모
   드로 사용됩니다: 시스템의 urandom 엔트로피 풀이 초기화될 때까지 블
   록 됩니다 (커널이 128비트의 엔트로피를 수집합니다). 이유는 **PEP
   524**를 참조하십시오. 리눅스에서, "getrandom()" 함수는
   ("GRND_NONBLOCK" 플래그를 사용하여) 비 블로킹 모드로 난수 바이트열
   을 얻거나, 시스템 urandom 엔트로피 풀이 초기화될 때까지 폴링 할 수
   있습니다.

   유닉스류 시스템에서, "/dev/urandom" 장치에서 난수 바이트열을 읽습니
   다. "/dev/urandom" 장치를 사용할 수 없거나 읽을 수 없으면,
   "NotImplementedError" 예외가 발생합니다.

   윈도우에서, "CryptGenRandom()"을 사용합니다.

   더 보기:

     "secrets" 모듈은 고수준 함수를 제공합니다. 플랫폼에서 제공되는 난
     수 발생기에 대한 사용하기 쉬운 인터페이스는 "random.SystemRandom"
     를 참조하십시오.

   버전 3.6.0에서 변경: 리눅스에서, "getrandom()"은 이제 보안을 강화하
   기 위해 블로킹 모드로 사용됩니다.

   버전 3.5.2에서 변경: 리눅스에서, "getrandom()" 시스템 호출이 블록
   하면 (urandom 엔트로피 풀이 아직 초기화되지 않았으면),
   "/dev/urandom"을 읽는 것으로 대체됩니다.

   버전 3.5에서 변경: 리눅스 3.17 및 이후 버전에서, 이제 "getrandom()"
   시스템 호출을 사용할 수 있으면 사용합니다. OpenBSD 5.6 이상에서, C
   "getentropy()" 함수가 이제 사용됩니다. 이 함수들은 내부 파일 기술자
   의 사용을 피합니다.

os.GRND_NONBLOCK

   기본적으로, "/dev/random"에서 읽을 때, "getrandom()"는 사용할 수 있
   는 난수 바이트열이 없으면 블록 하고, "/dev/urandom"에서 읽을 때는,
   엔트로피 풀이 아직 초기화되지 않았으면 블록 합니다.

   "GRND_NONBLOCK" 플래그가 설정되면, "getrandom()"는 이럴 때 블록 하
   지 않고, 대신 즉시 "BlockingIOError"를 발생시킵니다.

   버전 3.6에 추가.

os.GRND_RANDOM

   이 비트가 설정되면, "/dev/urandom" 풀 대신 "/dev/random" 풀에서 난
   수 바이트열을 얻습니다.

   버전 3.6에 추가.
