Python

운영 체제 유틸리티

PyObject *PyOS_FSPath(PyObject *path)
반환값: 새 참조. 상의 안정 ABI 버전 3.6 이후로.

path에 대한 파일 시스템 표현을 반환합니다. 객체가 str이나 bytes 객체이면, 새 강한 참조를 반환합니다. 객체가 os.PathLike 인터페이스를 구현하면, __fspath__()strbytes 객체일 때 반환됩니다. 그렇지 않으면, TypeError가 발생하고 NULL이 반환됩니다.

Added in version 3.6.

int Py_FdIsInteractive(FILE *fp, const char *filename)

이름이 filename인 표준 I/O 파일 fp를 대화식으로 간주하면 참(0이 아닙니다)을 반환합니다. isatty(fileno(fp))가 참인 파일의 경우입니다. PyConfig.interactive가 0이 아니면, 이 함수는 filename 포인터가 NULL이거나 이름이 문자열 '<stdin>'이나 '???' 중 하나와 같을 때도 참을 반환합니다.

이 함수는 Python이 초기화되기 전에 호출되어서는 안 됩니다.

void PyOS_BeforeFork()
상의 안정 ABI on platforms with fork() 버전 3.7 이후로.

프로세스 포크 전에 내부 상태를 준비하는 함수. fork()나 현재 프로세스를 복제하는 유사한 함수를 호출하기 전에 호출해야 합니다. fork()가 정의된 시스템에서만 사용 가능합니다.

경고

C fork() 호출은 (“메인” 인터프리터의) “메인” 스레드에서만 이루어져야 합니다. PyOS_BeforeFork()도 마찬가지입니다.

Added in version 3.7.

void PyOS_AfterFork_Parent()
상의 안정 ABI on platforms with fork() 버전 3.7 이후로.

프로세스 포크 후 일부 내부 상태를 갱신하는 함수. 프로세스 복제가 성공했는지와 관계없이, fork()나 현재 프로세스를 복제하는 유사한 함수를 호출한 후 부모 프로세스에서 호출해야 합니다. fork()가 정의된 시스템에서만 사용 가능합니다.

경고

C fork() 호출은 (“메인” 인터프리터의) “메인” 스레드에서만 이루어져야 합니다. PyOS_AfterFork_Parent()도 마찬가지입니다.

Added in version 3.7.

void PyOS_AfterFork_Child()
상의 안정 ABI on platforms with fork() 버전 3.7 이후로.

프로세스 포크 후 내부 인터프리터 상태를 갱신하는 함수. fork()나 현재 프로세스를 복제하는 유사한 함수를 호출한 후, 프로세스가 파이썬 인터프리터를 다시 호출할 가능성이 있으면 자식 프로세스에서 호출해야 합니다. fork()가 정의된 시스템에서만 사용 가능합니다.

경고

C fork() 호출은 (“메인” 인터프리터의) “메인” 스레드에서만 이루어져야 합니다. PyOS_AfterFork_Child()도 마찬가지입니다.

Added in version 3.7.

더 보기

os.register_at_fork()를 사용하면 PyOS_BeforeFork(), PyOS_AfterFork_Parent()PyOS_AfterFork_Child()에서 호출될 사용자 정의 파이썬 함수를 등록 할 수 있습니다.

void PyOS_AfterFork()
상의 안정 ABI on platforms with fork().

프로세스 포크 후 일부 내부 상태를 갱신하는 함수; 파이썬 인터프리터가 계속 사용된다면 새로운 프로세스에서 호출되어야 합니다. 새 실행 파일이 새 프로세스에 로드되면, 이 함수를 호출할 필요가 없습니다.

버전 3.7부터 폐지됨: 이 함수는 PyOS_AfterFork_Child()로 대체되었습니다.

int PyOS_CheckStack()
상의 안정 ABI on platforms with USE_STACKCHECK 버전 3.7 이후로.

인터프리터에 스택 공간이 부족하면 참을 반환합니다. 이것은 신뢰성 있는 확인이지만, USE_STACKCHECK이 정의되어 있을 때만 사용할 수 있습니다 (현재 마이크로소프트 Visual C++ 컴파일러를 사용하는 특정 버전의 윈도우에서). USE_STACKCHECK은 자동으로 정의됩니다; 여러분 자신의 코드에서 정의를 변경해서는 안 됩니다.

typedef void (*PyOS_sighandler_t)(int)
상의 안정 ABI.
PyOS_sighandler_t PyOS_getsig(int i)
상의 안정 ABI.

시그널 i에 대한 현재 시그널 처리기를 반환합니다. 이것은 sigaction()이나 signal()을 감싸는 얇은 래퍼입니다. 그 함수들을 직접 호출하지 마십시오!

PyOS_sighandler_t PyOS_setsig(int i, PyOS_sighandler_t h)
상의 안정 ABI.

시그널 i의 시그널 처리기를 h로 설정합니다; 이전 시그널 처리기를 반환합니다. 이것은 sigaction()이나 signal()을 감싸는 얇은 래퍼입니다. 그 함수들을 직접 호출하지 마십시오!

int PyOS_InterruptOccurred(void)
상의 안정 ABI.

SIGINT 신호가 수신되었는지 확인합니다.

SIGINT 가 발생했으면 1 을 반환하고 시그널 플래그를 지우며, 그렇지 않으면 0 을 반환합니다.

대부분의 경우, 이 함수보다 PyErr_CheckSignals() 을 사용하는 것이 좋습니다. PyErr_CheckSignals() 는 보류 중인 모든 시그널에 대한 적절한 시그널 핸들러를 호출하여 파이썬 코드가 시그널을 적절하게 처리할 수 있도록 합니다. 이 함수는 SIGINT 만 감지하고 어떤 파이썬 시그널 핸들러도 호출하지 않습니다.

This function is async-signal-safe and this function cannot fail. The caller must hold an attached thread state.

wchar_t *Py_DecodeLocale(const char *arg, size_t *size)
상의 안정 ABI 버전 3.7 이후로.

경고

이 함수는 더 이상 호출될 수 없습니다: Python is preinitialized <c-preinit>`가 필요한 :c:func:`PyConfig_SetBytesString 함수와 함께 PyConfig API를 사용해야 합니다.

이 함수는 Python is preinitialized <c-preinit>`가 되어야 하고 LC_CTYPE 로케일이 올바르게 구성되어야 하므로 호출될 수 없습니다: :c:func:`Py_PreInitialize 함수를 참조하십시오.

파일시스템 인코딩과 에러 처리기로 바이트열을 디코딩합니다. 에러 처리기가 surrogateescape 에러 처리기면, 디코딩할 수 없는 바이트열은 U+DC80..U+DCFF 범위의 문자로 디코딩됩니다; 그리고, 바이트 시퀀스를 서로게이트 문자로 디코딩 할 수 있으면, 이들을 디코딩하는 대신 surrogateescape 에러 처리기를 사용하여 바이트열를 이스케이프 합니다.

새로 할당된 와이드 문자(wide character) 문자열에 대한 포인터를 반환합니다, 메모리를 해제하려면 PyMem_RawFree()를 사용하십시오. size가 NULL이 아니면, 널 문자를 제외한 와이드 문자 수를 *size에 기록합니다.

디코딩 에러나 메모리 할당 에러 시 NULL을 반환합니다. sizeNULL이 아니면, 메모리 에러 시 *size(size_t)-1로 설정되고, 디코딩 에러 시 (size_t)-2로 설정됩니다.

The filesystem encoding and error handler are selected by PyConfig_Read(): see filesystem_encoding and filesystem_errors members of PyConfig.

C 라이브러리에 버그가 없으면, 디코딩 에러가 발생하지 않아야 합니다.

문자열을 바이트열로 다시 인코딩하려면 Py_EncodeLocale() 함수를 사용하십시오.

Added in version 3.5.

버전 3.7에서 변경: 이 함수는 이제 파이썬 UTF-8 모드에서 UTF-8 인코딩을 사용합니다.

버전 3.8에서 변경: 이 함수는 이제 윈도우에서 PyPreConfig.legacy_windows_fs_encoding가 0이면 UTF-8 인코딩을 사용합니다;

char *Py_EncodeLocale(const wchar_t *text, size_t *error_pos)
상의 안정 ABI 버전 3.7 이후로.

와이드 문자(wide character) 문자열을 파일시스템 인코딩과 에러 처리기로 인코딩합니다. 에러 처리기가 surrogateescape 에러 처리기면 U+DC80..U+DCFF 범위의 서로게이트 문자는 바이트 0x80..0xFF로 변환됩니다.

새로 할당된 바이트열에 대한 포인터를 반환합니다, 메모리를 해제하려면 PyMem_Free()를 사용하십시오. 인코딩 에러나 메모리 할당 에러 시 NULL을 반환합니다.

error_pos가 NULL이 아니면, *error_pos는 성공 시 (size_t)-1로 설정되고, 인코딩 에러 시 유효하지 않은 문자의 인덱스로 설정됩니다.

The filesystem encoding and error handler are selected by PyConfig_Read(): see filesystem_encoding and filesystem_errors members of PyConfig.

바이트열을 와이드 문자 문자열로 다시 디코딩하려면 Py_DecodeLocale() 함수를 사용하십시오.

경고

이 함수는 Python is preinitialized <c-preinit>`가 되어야 하고 LC_CTYPE 로케일이 올바르게 구성되어야 하므로 호출될 수 없습니다: :c:func:`Py_PreInitialize 함수를 참조하십시오.

Added in version 3.5.

버전 3.7에서 변경: 이 함수는 이제 파이썬 UTF-8 모드에서 UTF-8 인코딩을 사용합니다.

버전 3.8에서 변경: 이 함수는 이제 윈도우에서 PyPreConfig.legacy_windows_fs_encoding이 0이면 UTF-8 인코딩을 사용합니다.

FILE *Py_fopen(PyObject *path, const char *mode)

fopen() 과 비슷하지만, path 는 파이썬 객체이며 오류 시 예외가 설정됩니다.

pathstr 객체이거나, bytes 객체이거나, 또는 path-like object 여야 합니다.

성공하면 새 파일 포인터를 반환합니다. 오류 시에는 예외를 설정하고 NULL 을 반환합니다.

파일은 :c:func:`!fclose`을 직접 호출하기보다는 :c:func:`Py_fclose`에 의해 닫혀야 합니다.

파일 기술자는 상속 불가능하도록 (PEP 446) 생성됩니다.

호출자는 :term:`첨부된 스레드 상태 <attached thread state>`를 가지고 있어야 합니다.

Added in version 3.14.

int Py_fclose(FILE *file)

:c:func:`Py_fopen`에 의해 열린 파일을 닫습니다.

성공하면 0 을 반환합니다. 오류 시에는 EOF 를 반환하고 errno 가 오류를 나타내도록 설정됩니다. 어느 쪽이든, 스트림에 대한 후속 접근( Py_fclose() 를 다시 호출하는 것을 포함)은 정의되지 않은 동작을 초래합니다.

Added in version 3.14.

시스템 함수

sys 모듈의 기능을 C 코드에서 액세스 할 수 있게 하는 유틸리티 함수입니다. 모두 내부 스레드 상태 구조체에 포함된 현재 인터프리터 스레드의 sys 모듈의 딕셔너리에 작동합니다.

PyObject *PySys_GetAttr(PyObject *name)
상의 안정 ABI 버전 3.15 이후로.

sys 모듈의 속성 name 을 가져옵니다. strong reference 를 반환합니다. 존재하지 않거나 sys 모듈을 찾을 수 없는 경우, RuntimeError 를 발생시키고 NULL 을 반환합니다.

존재하지 않는 객체를 오류로 취급해서는 안 되는 경우, 대신 :c:func:`PySys_GetOptionalAttr`를 사용할 수 있습니다.

Added in version 3.15.

PyObject *PySys_GetAttrString(const char *name)
상의 안정 ABI 버전 3.15 이후로.

이것은 PyObject* 가 아닌, nameconst char* UTF-8로 인코딩된 바이트 문자열로 지정되는 PySys_GetAttr() 와 같습니다.

존재하지 않는 객체를 오류로 취급해서는 안 되는 경우, 대신 :c:func:`PySys_GetOptionalAttrString`을 사용할 수 있습니다.

Added in version 3.15.

int PySys_GetOptionalAttr(PyObject *name, PyObject **result)
상의 안정 ABI 버전 3.15 이후로.

객체가 존재하지 않을 경우 예외를 발생시키지 않는 :c:func:`PySys_GetAttr`의 변형입니다.

  • *result 을 객체에 대한 새로운 strong reference 로 설정하고, 객체가 존재하면 1 을 반환합니다.

  • 객체가 존재하지 않는 경우, 예외를 설정하지 않고 \*resultNULL 로 설정하고 0 을 반환합니다.

  • 오류가 발생한 경우, 예외를 설정하고, \*resultNULL 로 설정하며, -1 을 반환합니다.

Added in version 3.15.

int PySys_GetOptionalAttrString(const char *name, PyObject **result)
상의 안정 ABI 버전 3.15 이후로.

이것은 PyObject* 가 아닌, nameconst char* UTF-8로 인코딩된 바이트 문자열로 지정되는 PySys_GetOptionalAttr() 와 같습니다.

Added in version 3.15.

PyObject *PySys_GetObject(const char *name)
반환값: 빌린 참조. 상의 안정 ABI.

PySys_GetAttrString() 과 유사하지만, borrowed reference 를 반환하고 실패 시 예외를 설정하지 않은 상태로 NULL 을 반환합니다.

호출 전에 설정된 예외를 보존합니다.

int PySys_SetObject(const char *name, PyObject *v)
상의 안정 ABI.

vNULL이 아닌 한 sys 모듈의 namev로 설정합니다. NULL이면 name은 sys 모듈에서 삭제됩니다. 성공하면 0, 에러 시 -1을 반환합니다.

void PySys_WriteStdout(const char *format, ...)
상의 안정 ABI.

format으로 기술되는 출력 문자열을 sys.stdout에 기록합니다. 잘림이 발생하더라도 예외는 발생하지 않습니다 (아래를 참조하십시오).

format은 포맷된 출력 문자열의 총 크기를 1000바이트 이하로 제한해야 합니다 – 1000바이트 이후에는, 출력 문자열이 잘립니다. 특히, 이것은 무제한 “%s” 포맷이 있어서는 안 됨을 의미합니다; “%.<N>s”를 사용하여 제한해야 합니다, 여기서 <N>은 <N>에 다른 포맷된 텍스트의 최대 크기를 더할 때 1000바이트를 초과하지 않도록 계산된 십진수입니다. 또한 “%f”도 주의하십시오, 아주 큰 숫자는 수백 자리를 인쇄할 수 있습니다.

문제가 발생하거나, sys.stdout가 설정되어 있지 않으면, 포맷된 메시지는 실제(C 수준) stdout에 기록됩니다.

void PySys_WriteStderr(const char *format, ...)
상의 안정 ABI.

PySys_WriteStdout()과 같지만, 대신 sys.stderr이나 stderr에 씁니다.

void PySys_FormatStdout(const char *format, ...)
상의 안정 ABI.

PySys_WriteStdout()과 유사한 함수이지만, 메시지를 PyUnicode_FromFormatV()를 사용하여 포맷하고 메시지를 임의의 길이로 자르지 않습니다.

Added in version 3.2.

void PySys_FormatStderr(const char *format, ...)
상의 안정 ABI.

PySys_FormatStdout()과 같지만, 대신 sys.stderr이나 stderr에 씁니다.

Added in version 3.2.

PyObject *PySys_GetXOptions()
반환값: 빌린 참조. 상의 안정 ABI 버전 3.7 이후로.

sys._xoptions와 유사하게, -X 옵션의 현재 딕셔너리를 반환합니다. 에러가 발생하면, NULL이 반환되고 예외가 설정됩니다.

Added in version 3.2.

int PySys_Audit(const char *event, const char *format, ...)
상의 안정 ABI 버전 3.13 이후로.

모든 활성 훅으로 감사 이벤트를 발생시킵니다. 성공 시 0을 반환하고 실패 시 예외를 설정하여 0이 아닌 값을 반환합니다.

event 문자열 인수는 NULL 이 아니어야 합니다.

훅이 추가되었으면, format과 기타 인자를 사용하여 전달할 튜플을 구성합니다. N 외에도, Py_BuildValue()에서 사용된 것과 같은 포맷 문자를 사용할 수 있습니다. 빌드된 값이 튜플이 아니면, 단일 요소 튜플에 추가됩니다.

N 포맷 옵션은 사용하지 않아야 합니다. 참조를 소비하지만, 이 함수에 대한 인자가 소비될지를 알 방법이 없기 때문에, 사용하면 참조 누수가 발생할 수 있습니다.

PY_SSIZE_T_CLEAN이 정의되었는지와 관계없이, # 포맷 문자는 항상 Py_ssize_t로 처리되어야 합니다.

sys.audit()은 파이썬 코드와 동일한 기능을 수행합니다.

또한 :c:func:`PySys_AuditTuple`도 참조하십시오.

Added in version 3.8.

버전 3.8.2에서 변경: # 포맷 문자에 대해 Py_ssize_t를 요구합니다. 이전에는, 피할 수 없는 폐지 경고가 발생했습니다.

int PySys_AuditTuple(const char *event, PyObject *args)
상의 안정 ABI 버전 3.13 이후로.

PySys_Audit() 와 유사하지만, args 를 파이썬 객체로 전달합니다. argstuple 이어야 합니다. 인자를 전달하지 않으려면, argsNULL 일 수 있습니다.

Added in version 3.13.

int PySys_AddAuditHook(Py_AuditHookFunction hook, void *userData)

활성 감사 훅 리스트에 콜러블 hook을 추가합니다. 성공하면 0을, 실패하면 0이 아닌 값을 반환합니다. 런타임이 초기화되었으면, 실패 시 에러도 설정합니다. 이 API를 통해 추가된 훅은 런타임이 만든 모든 인터프리터에 대해 호출됩니다.

userData 포인터는 훅 함수로 전달됩니다. 훅 함수는 다른 런타임에서 호출될 수 있어서, 이 포인터는 파이썬 상태를 직접 참조하면 안 됩니다.

이 함수는 Py_Initialize() 이전에 호출해도 안전합니다. 런타임 초기화 후 호출되면, 기존 감사 훅에 알리고 Exception에서 서브 클래싱 된 에러를 발생 시켜 조용히 연산을 중단할 수 있습니다 (다른 에러는 억제되지(silenced) 않습니다).

훅 함수는 이벤트를 발생시킨 파이썬 인터프리터에 의해 항상 :term:`attached thread state`와 함께 호출됩니다.

감사에 대한 자세한 설명은 PEP 578을 참조하십시오. 이벤트를 발생시키는 런타임과 표준 라이브러리의 함수는 감사 이벤트 표에 나열되어 있습니다. 자세한 내용은 각 함수 설명서에 있습니다.

인터프리터가 초기화되면, 이 함수는 인자 없이 감사 이벤트 sys.addaudithook을 발생시킵니다. 기존 훅이 Exception에서 파생된 예외를 발생시키면, 새 훅이 추가되지 않고 예외가 지워집니다. 결과적으로, 호출자가 기존의 모든 훅을 제어하지 않는 한 훅이 추가되었다고 가정할 수 없습니다.

typedef int (*Py_AuditHookFunction)(const char *event, PyObject *args, void *userData)

훅 함수의 유형입니다. eventPySys_Audit() 또는 PySys_AuditTuple() 에 전달된 C 문자열 이벤트 인자입니다. argsPyTupleObject 임을 보장합니다. userData 는 PySys_AddAuditHook()에 전달된 인자입니다.

Added in version 3.8.

프로세스 제어

void Py_FatalError(const char *message)
상의 안정 ABI.

치명적인 에러 메시지를 인쇄하고 프로세스를 죽입니다. 아무런 정리도 수행되지 않습니다. 이 함수는 파이썬 인터프리터를 계속 사용하는 것이 위험한 조건이 감지되었을 때만 호출해야 합니다; 예를 들어, 객체 관리가 손상된 것으로 보일 때. 유닉스에서는, 표준 C 라이브러리 함수 abort()가 호출되어 core 파일을 생성하려고 시도합니다.

Py_LIMITED_API 매크로가 정의되어 있지 않은 한, Py_FatalError() 함수는 현재 함수의 이름을 자동으로 로그 하는 매크로로 대체됩니다.

버전 3.9에서 변경: 함수 이름을 자동으로 로그 합니다.

void Py_Exit(int status)
상의 안정 ABI.

현재 프로세스를 종료합니다. 이것은 Py_FinalizeEx()를 호출한 다음 표준 C 라이브러리 함수 exit(status)를 호출합니다. Py_FinalizeEx()가 에러를 표시하면, 종료 상태는 120으로 설정됩니다.

버전 3.6에서 변경: 파이널리제이션에서의 에러가 더는 무시되지 않습니다.

int Py_AtExit(void (*func)())
상의 안정 ABI.

Py_FinalizeEx()가 호출할 정리 함수를 등록합니다. 정리 함수는 인자 없이 호출되며 값을 반환하지 않아야 합니다. 최대 32개의 정리 함수를 등록할 수 있습니다. 등록이 성공하면, Py_AtExit()0을 반환합니다; 실패하면 -1을 반환합니다. 마지막에 등록된 정리 함수가 먼저 호출됩니다. 각 정리 함수는 최대 한 번 호출됩니다. 정리 함수 전에 파이썬의 내부 파이널리제이션이 완료되기 때문에, func에서 파이썬 API를 호출하면 안 됩니다.

더 보기

PyUnstable_AtExit() for passing a void *data argument.

분실물 보관소