매우 고수준 계층
****************

이 장의 함수들은 파일이나 버퍼에 제공된 파이썬 소스 코드를 실행할 수
있도록 하지만, 인터프리터와 더 세밀한 방식으로 상호 작용하도록 하지는
않습니다.

이러한 함수 중 일부는 문법의 시작 기호를 매개 변수로 받아들입니다. 사
용 가능한 시작 기호는 "Py_eval_input", "Py_file_input" 및
"Py_single_input"입니다. 이것들은 이들을 매개 변수로 받아들이는 함수
뒤에 설명됩니다.

또한 이 함수 중 일부는 "FILE*" 매개 변수를 취합니다. 주의해서 다루어야
할 한 가지 문제는 다른 C 라이브러리의 "FILE" 구조체가 다르고, 호환되지
않을 수 있다는 것입니다. (적어도) 윈도우에서는, 동적으로 링크된 확장에
서 실제로 다른 라이브러리를 사용할 수 있어서, "FILE*" 매개 변수가 파이
썬 런타임이 사용하고 있는 것과 같은 라이브러리에서 만들어진 것이 확실
할 때만 이러한 함수에 전달되도록 주의해야 합니다.

int Py_Main(int argc, wchar_t **argv)

   표준 인터프리터의 메인 프로그램. 이것은 파이썬을 내장하는 프로그램
   을 위해 제공됩니다. *argc*와 *argv* 매개 변수는 C 프로그램의
   "main()" 함수에 전달되는 것과 정확히 일치하도록 준비해야 합니다 (사
   용자의 로케일에 따라 wchar_t로 변환됩니다). 인자 목록이 수정될 수
   있음에 유의해야 합니다 (하지만 인자 목록이 가리키는 문자열의 내용은
   수정되지 않습니다). 인터프리터가 정상적으로 (즉, 예외 없이) 종료되
   면 반환 값은 "0", 예외로 인해 인터프리터가 종료되면 "1", 매개 변수
   목록이 유효한 파이썬 명령 줄을 나타내지 않으면 "2"가 됩니다.

   처리되지 않은 "SystemExit"가 발생하면, 이 함수는 "Py_InspectFlag"가
   설정되어 있지 않은 한 "1"을 반환하지 않고 프로세스를 종료함에 유의
   하십시오.

int Py_BytesMain(int argc, char **argv)

   "Py_Main()"과 유사하지만 *argv*는 바이트 문자열의 배열입니다.

   버전 3.8에 추가.

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

   아래 "PyRun_AnyFileExFlags()" 의 단순화된 인터페이스입니다.
   *closeit*은 "0"으로 *flags*는 "NULL"로 설정된 상태로 남겨둡니다.

int PyRun_AnyFileFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)

   아래 "PyRun_AnyFileExFlags()" 의 단순화된 인터페이스입니다. 이것은
   *closeit* 인자를 "0"으로 설정된 상태로 남겨둡니다.

int PyRun_AnyFileEx(FILE *fp, const char *filename, int closeit)

   아래 "PyRun_AnyFileExFlags()" 의 단순화된 인터페이스입니다. 이것은
   *flags* 인자를 "NULL"로 설정된 상태로 남겨둡니다.

int PyRun_AnyFileExFlags(FILE *fp, const char *filename, int closeit, PyCompilerFlags *flags)

   If *fp* refers to a file associated with an interactive device
   (console or terminal input or Unix pseudo-terminal), return the
   value of "PyRun_InteractiveLoop()", otherwise return the result of
   "PyRun_SimpleFile()".  *filename* is decoded from the filesystem
   encoding ("sys.getfilesystemencoding()").  If *filename* is "NULL",
   this function uses ""???"" as the filename. If *closeit* is true,
   the file is closed before "PyRun_SimpleFileExFlags()" returns.

int PyRun_SimpleString(const char *command)

   아래 "PyRun_SimpleStringFlags()" 의 단순화된 인터페이스입니다.
   "PyCompilerFlags"* 인자를 "NULL"로 설정된 상태로 남겨둡니다.

int PyRun_SimpleStringFlags(const char *command, PyCompilerFlags *flags)

   *flags* 인자에 따라 "__main__" 모듈에서 *command*에 있는 파이썬 소
   스 코드를 실행합니다. "__main__"이 존재하지 않으면 만듭니다. 성공하
   면 "0"을, 예외가 발생하면 "-1"을 반환합니다. 에러가 있으면, 예외 정
   보를 얻을 방법이 없습니다. *flags*의 의미는 아래를 참조하십시오.

   처리되지 않은 "SystemExit"가 발생하면, 이 함수는 "Py_InspectFlag"가
   설정되어 있지 않은 한 "-1"을 반환하지 않고 프로세스를 종료함에 유의
   하십시오.

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

   아래 "PyRun_SimpleFileExFlags()" 의 단순화된 인터페이스입니다.
   *closeit*을 "0"으로, *flags*를 "NULL"로 설정된 상태로 남겨둡니다.

int PyRun_SimpleFileEx(FILE *fp, const char *filename, int closeit)

   아래 "PyRun_SimpleFileExFlags()" 의 단순화된 인터페이스입니다.
   *flags*를 "NULL"로 설정된 상태로 남겨둡니다.

int PyRun_SimpleFileExFlags(FILE *fp, const char *filename, int closeit, PyCompilerFlags *flags)

   "PyRun_SimpleStringFlags()" 와 비슷하지만, 메모리에 있는 문자열 대
   신 *fp*에서 파이썬 소스 코드를 읽습니다. *filename*은 파일의 이름이
   어야 하며, 파일 시스템 인코딩("sys.getfilesystemencoding()")으로 디
   코딩됩니다. *closeit*이 참이면 PyRun_SimpleFileExFlags 가 반환하기
   전에 파일이 닫힙니다.

   참고:

     윈도우에서, *fp*는 바이너리 모드로 열어야 합니다 (예를 들어
     "fopen(filename, "rb")"). 그렇지 않으면, 파이썬은 LF 줄 종료가 있
     는 스크립트 파일을 올바르게 처리하지 못할 수 있습니다.

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

   아래 "PyRun_InteractiveOneFlags()" 의 단순화된 인터페이스입니다.
   *flags*를 "NULL"로 설정된 상태로 남겨둡니다.

int PyRun_InteractiveOneFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)

   *flags* 인자에 따라 대화식 장치와 연관된 파일에서 단일 문장을 읽고
   실행합니다. "sys.ps1"과 "sys.ps2"를 사용하여 사용자에게 프롬프트 합
   니다. *filename*은 파일 시스템 인코딩
   ("sys.getfilesystemencoding()")으로 디코딩됩니다.

   입력이 성공적으로 실행될 때 "0"을, 예외가 있으면 "-1"을, 또는 구문
   분석 에러가 있으면 파이썬의 일부로 배포된 "errcode.h" 인클루드 파일
   에 있는 에러 코드를 반환합니다. ("errcode.h"는 "Python.h"에서 인클
   루드하지 않기 때문에 필요하면 특별히 인클루드해야 함에 유의하십시오
   .)

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

   아래 "PyRun_InteractiveLoopFlags()" 의 단순화된 인터페이스입니다.
   *flags*를 "NULL"로 설정된 상태로 남겨둡니다.

int PyRun_InteractiveLoopFlags(FILE *fp, const char *filename, PyCompilerFlags *flags)

   EOF에 도달할 때까지 대화식 장치와 연관된 파일에서 문장을 읽고 실행
   합니다. "sys.ps1"과 "sys.ps2"를 사용하여 사용자에게 프롬프트 합니다
   . *filename*은 파일 시스템 인코딩("sys.getfilesystemencoding()")으
   로 디코딩됩니다. EOF에서 "0"을 반환하거나, 실패하면 음수를 반환합니
   다.

int (*PyOS_InputHook)(void)

   프로토타입 "int func(void)"인 함수를 가리키도록 설정할 수 있습니다.
   이 함수는 파이썬의 인터프리터 프롬프트가 유휴 상태가 되고 터미널에
   서 사용자 입력을 기다리려고 할 때 호출됩니다. 반환 값은 무시됩니다.
   이 훅을 재정의하는 것은 파이썬 소스 코드의 "Modules/_tkinter.c"에서
   한 것처럼 인터프리터의 프롬프트를 다른 이벤트 루프와 통합하는 데 사
   용될 수 있습니다.

char* (*PyOS_ReadlineFunctionPointer)(FILE *, FILE *, const char *)

   프로토타입 "char *func(FILE *stdin, FILE *stdout, char *prompt)"인
   함수를 가리키도록 설정하여, 인터프리터의 프롬프트에서 단일 입력 줄
   을 읽는 데 사용되는 기본 함수를 재정의할 수 있습니다. 이 함수는
   "NULL"이 아니면 문자열 *prompt*를 출력한 다음 제공된 표준 입력 파일
   에서 입력 줄을 읽고 결과 문자열을 반환할 것이라고 기대됩니다. 예를
   들어, "readline" 모듈은 이 훅을 설정하여 줄 편집과 탭 완성 기능을
   제공합니다.

   결과는 "PyMem_RawMalloc()"이나 "PyMem_RawRealloc()"으로 할당된 문자
   열 이거나, 에러가 발생했으면 "NULL"이어야 합니다.

   버전 3.4에서 변경: 결과는 "PyMem_Malloc()"이나 "PyMem_Realloc()"으
   로 할당하는 대신, "PyMem_RawMalloc()"이나 "PyMem_RawRealloc()"으로
   할당해야 합니다.

struct _node* PyParser_SimpleParseString(const char *str, int start)

   아래 "PyParser_SimpleParseStringFlagsFilename()"의 단순화된 인터페
   이스입니다. *filename*을 "NULL"로, *flags*를 "0"으로 설정된 상태로
   남겨둡니다.

   Deprecated since version 3.9, will be removed in version 3.10.

struct _node* PyParser_SimpleParseStringFlags(const char *str, int start, int flags)

   아래 "PyParser_SimpleParseStringFlagsFilename()"의 단순화된 인터페
   이스입니다. 이것은 *filename*을 "NULL"로 설정된 상태로 남겨둡니다.

   Deprecated since version 3.9, will be removed in version 3.10.

struct _node* PyParser_SimpleParseStringFlagsFilename(const char *str, const char *filename, int start, int flags)

   *flags* 인자에 따라 시작 토큰 *start*를 사용하여 *str*에서 파이썬
   소스 코드를 구문 분석합니다. 결과는 효율적으로 평가될 수 있는 코드
   객체를 생성하는 데 사용될 수 있습니다. 코드 조각을 여러 번 평가해야
   하는 경우에 유용합니다. *filename*은 파일 시스템 인코딩
   ("sys.getfilesystemencoding()")으로 디코딩됩니다.

   Deprecated since version 3.9, will be removed in version 3.10.

struct _node* PyParser_SimpleParseFile(FILE *fp, const char *filename, int start)

   아래 "PyParser_SimpleParseFileFlags()" 의 단순화된 인터페이스입니다
   . *flags*를 "0"으로 설정된 상태로 남겨둡니다.

   Deprecated since version 3.9, will be removed in version 3.10.

struct _node* PyParser_SimpleParseFileFlags(FILE *fp, const char *filename, int start, int flags)

   "PyParser_SimpleParseStringFlagsFilename()"와 유사하지만, 파이썬 소
   스 코드는 메모리에 있는 문자열 대신 *fp*에서 읽습니다.

   Deprecated since version 3.9, will be removed in version 3.10.

PyObject* PyRun_String(const char *str, int start, PyObject *globals, PyObject *locals)
    *Return value: New reference.*

   아래 "PyRun_StringFlags()"의 단순화된 인터페이스입니다. 이것은
   *flags*를 "NULL"로 설정된 상태로 남겨둡니다.

PyObject* PyRun_StringFlags(const char *str, int start, PyObject *globals, PyObject *locals, PyCompilerFlags *flags)
    *Return value: New reference.*

   *flags*로 지정된 컴파일러 플래그를 사용하여 *globals*과 *locals* 객
   체로 지정된 컨텍스트에서 *str*에서 파이썬 소스 코드를 실행합니다.
   *globals*는 딕셔너리이어야 합니다. *locals*는 매핑 프로토콜을 구현
   하는 모든 객체가 될 수 있습니다. 매개 변수 *start*는 소스 코드를 구
   문 분석하는 데 사용해야 하는 시작 토큰을 지정합니다.

   코드를 실행한 결과를 파이썬 객체로 반환하거나, 예외가 발생하면
   "NULL"을 반환합니다.

PyObject* PyRun_File(FILE *fp, const char *filename, int start, PyObject *globals, PyObject *locals)
    *Return value: New reference.*

   아래 "PyRun_FileExFlags()"의 단순화된 인터페이스입니다. *closeit*을
   "0"으로, *flags*를 "NULL"로 설정된 상태로 남겨둡니다.

PyObject* PyRun_FileEx(FILE *fp, const char *filename, int start, PyObject *globals, PyObject *locals, int closeit)
    *Return value: New reference.*

   아래 "PyRun_FileExFlags()"의 단순화된 인터페이스입니다. *flags*를
   "NULL"로 설정된 상태로 남겨둡니다.

PyObject* PyRun_FileFlags(FILE *fp, const char *filename, int start, PyObject *globals, PyObject *locals, PyCompilerFlags *flags)
    *Return value: New reference.*

   아래 "PyRun_FileExFlags()"의 단순화된 인터페이스입니다. *closeit*을
   "0"으로 설정된 상태로 남겨둡니다.

PyObject* PyRun_FileExFlags(FILE *fp, const char *filename, int start, PyObject *globals, PyObject *locals, int closeit, PyCompilerFlags *flags)
    *Return value: New reference.*

   "PyRun_StringFlags()"와 유사하지만, 파이썬 소스 코드는 메모리에 있
   는 문자열 대신 *fp*에서 읽습니다. *filename*은 파일명이어야 하며 파
   일 시스템 인코딩("sys.getfilesystemencoding()")으로 디코딩됩니다.
   *closeit*이 참이면 "PyRun_FileExFlags()"가 반환되기 전에 파일이 닫
   힙니다.

PyObject* Py_CompileString(const char *str, const char *filename, int start)
    *Return value: New reference.*

   아래 "Py_CompileStringFlags()" 의 단순화된 인터페이스입니다.
   *flags*를 "NULL"로 설정된 상태로 유지합니다.

PyObject* Py_CompileStringFlags(const char *str, const char *filename, int start, PyCompilerFlags *flags)
    *Return value: New reference.*

   아래 "Py_CompileStringExFlags()" 의 단순화된 인터페이스입니다.
   *optimize*를 "-1"로 설정된 상태로 유지합니다.

PyObject* Py_CompileStringObject(const char *str, PyObject *filename, int start, PyCompilerFlags *flags, int optimize)
    *Return value: New reference.*

   *str*에 있는 파이썬 소스 코드를 구문 분석하고 컴파일하여 결과 코드
   객체를 반환합니다. 시작 토큰은 *start*로 주어집니다; 이것은 컴파일
   될 수 있는 코드를 제한하는 데 사용될 수 있으며 "Py_eval_input",
   "Py_file_input" 또는 "Py_single_input"이어야 합니다. *filename*으로
   지정된 파일명은 코드 객체를 구성하는 데 사용되며 트레이스백이나
   "SyntaxError" 예외 메시지에 나타날 수 있습니다. 코드를 구문 분석할
   수 없거나 컴파일할 수 없으면 "NULL"을 반환합니다.

   정수 *optimize*는 컴파일러의 최적화 수준을 지정합니다. "-1" 값은
   "-O" 옵션으로 주어진 것처럼 인터프리터의 최적화 수준을 선택합니다.
   명시적 수준은 "0" (최적화 없음; "__debug__"가 참), "1" (어서션이 제
   거되고 "__debug__"가 거짓) 또는 "2" (독스트링도 제거됩니다)입니다.

   버전 3.4에 추가.

PyObject* Py_CompileStringExFlags(const char *str, const char *filename, int start, PyCompilerFlags *flags, int optimize)
    *Return value: New reference.*

   "Py_CompileStringObject()"와 유사하지만, *filename*은 파일 시스템
   인코딩("os.fsdecode()")으로 디코딩된 바이트 문자열입니다.

   버전 3.2에 추가.

PyObject* PyEval_EvalCode(PyObject *co, PyObject *globals, PyObject *locals)
    *Return value: New reference.*

   이것은 코드 객체와 전역 변수 및 지역 변수만 있는,
   "PyEval_EvalCodeEx()"의 단순화된 인터페이스입니다. 다른 인자는
   "NULL"로 설정됩니다.

PyObject* PyEval_EvalCodeEx(PyObject *co, PyObject *globals, PyObject *locals, PyObject *const *args, int argcount, PyObject *const *kws, int kwcount, PyObject *const *defs, int defcount, PyObject *kwdefs, PyObject *closure)
    *Return value: New reference.*

   주어진 평가를 위한 특정 환경에서, 미리 컴파일된 코드 객체를 평가합
   니다. 이 환경은 전역 변수의 딕셔너리, 지역 변수의 매핑 객체, 인자의
   배열, 키워드와 기본값, 키워드 전용 인자의 기본값 딕셔너리 및 셀의
   클로저 튜플로 구성됩니다.

PyFrameObject

   프레임 객체를 기술하는 데 사용되는 객체의 C 구조체. 이 형의 필드는
   언제든지 변경될 수 있습니다.

PyObject* PyEval_EvalFrame(PyFrameObject *f)
    *Return value: New reference.*

   실행 프레임을 평가합니다. 이전 버전과의 호환성을 위한,
   "PyEval_EvalFrameEx()"의 단순화된 인터페이스입니다.

PyObject* PyEval_EvalFrameEx(PyFrameObject *f, int throwflag)
    *Return value: New reference.*

   이것은 파이썬 인터프리트의 메인, 꾸미지 않은 함수입니다. 실행 프레
   임 *f*와 연관된 코드 객체가 실행됩니다. 필요에 따라 바이트 코드를
   해석하고 호출을 실행합니다. 추가 *throwflag* 매개 변수는 대체로 무
   시할 수 있습니다 - 참이면, 예외가 즉시 발생하도록 합니다; 제너레이
   터 객체의 "throw()" 메서드에 사용됩니다.

   버전 3.4에서 변경: 이 함수는 이제 활성 예외를 조용히 버리지 않았는
   지 확인하도록 도우려고 디버그 어서션을 포함합니다.

int PyEval_MergeCompilerFlags(PyCompilerFlags *cf)

   이 함수는 현재 평가 프레임의 플래그를 변경하고, 성공하면 참을, 실패
   하면 거짓을 반환합니다.

int Py_eval_input

   격리된 표현식을 위한 파이썬 문법의 시작 기호; "Py_CompileString()"
   과 함께 사용합니다.

int Py_file_input

   파일이나 다른 소스에서 읽은 문장의 시퀀스를 위한 파이썬 문법의 시작
   기호; "Py_CompileString()"과 함께 사용합니다. 임의로 긴 파이썬 소스
   코드를 컴파일할 때 사용하는 기호입니다.

int Py_single_input

   단일 문장을 위한 파이썬 문법의 시작 기호; "Py_CompileString()"과 함
   께 사용합니다. 대화식 인터프리터 루프에 사용되는 기호입니다.

struct PyCompilerFlags

   이것은 컴파일러 플래그를 담는 데 사용되는 구조체입니다. 코드가 컴파
   일되기만 하는 경우 "int flags"로 전달되고, 코드가 실행되는 경우
   "PyCompilerFlags *flags"로 전달됩니다. 이 경우, "from __future__
   import"는 *flags*를 수정할 수 있습니다.

   "PyCompilerFlags *flags"가 "NULL"일 때마다, "cf_flags"는 "0"과 같다
   고 취급되며, "from __future__ import"로 인한 수정은 버립니다.

   int cf_flags

      컴파일러 플래그.

   int cf_feature_version

      *cf_feature_version*은 부 파이썬 버전입니다. "PY_MINOR_VERSION"
      으로 초기화되어야 합니다.

      이 필드는 기본적으로 무시되며, "PyCF_ONLY_AST" 플래그가
      *cf_flags*에 설정된 경우에만 사용됩니다.

   버전 3.8에서 변경: *cf_feature_version* 필드를 추가했습니다.

int CO_FUTURE_DIVISION

   *flags*에서 이 비트를 설정하면 **PEP 238**에 따라 나누기 연산자 "/"
   를 "실수 나누기(true division)"로 해석되도록 합니다.
