Python

매우 고수준 계층

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

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

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

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

아래 PyRun_AnyFileExFlags() 의 단순화된 인터페이스입니다. closeit0으로 flagsNULL로 설정된 상태로 남겨둡니다.

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)

fp가 대화식 장치(콘솔이나 터미널 입력이나 유닉스 의사 터미널)와 연결된 파일을 가리키면, PyRun_InteractiveLoop()의 값을 반환하고, 그렇지 않으면 PyRun_SimpleFile()의 결과를 반환합니다. filename은 파일 시스템 인코딩(sys.getfilesystemencoding())으로 디코딩됩니다. filenameNULL이면, 이 함수는 파일명으로 "???"를 사용합니다. closeit이 참이면, PyRun_SimpleFileExFlags()이 반환하기 전에 파일이 닫힙니다.

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가 발생하면, 이 함수는 PyConfig.inspect가 0인 한 -1을 반환하지 않고 프로세스를 종료함에 유의하십시오.

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

아래 PyRun_SimpleFileExFlags() 의 단순화된 인터페이스입니다. closeit0으로, flagsNULL로 설정된 상태로 남겨둡니다.

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

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

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

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

참고

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

int PyRun_InteractiveOneObject(FILE *fp, PyObject *filename, PyCompilerFlags *flags)

flags 인자에 따라 대화식 장치와 연관된 파일에서 단일 문장을 읽고 실행합니다. 사용자는 sys.ps1 \과 sys.ps2 \를 사용하여 프롬프트를 받게 됩니다. filename 이 Python str 객체여야 합니다.

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

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

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

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

PyRun_InteractiveOneObject() 와 유사하지만, filename파일시스템 인코딩과 에러 처리기 \에서 디코딩되는 const char* 입니다.

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

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

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

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

int (*PyOS_InputHook)(void)
상의 안정 ABI.

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

버전 3.12에서 변경: 이 함수는 오직 메인 인터프리터\에서 호출됩니다.

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()으로 할당해야 합니다.

버전 3.12에서 변경: 이 함수는 오직 메인 인터프리터\에서 호출됩니다.

PyObject *PyRun_String(const char *str, int start, PyObject *globals, PyObject *locals)
반환값: 새 참조.

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

PyObject *PyRun_StringFlags(const char *str, int start, PyObject *globals, PyObject *locals, PyCompilerFlags *flags)
반환값: 새 참조.

flags 가 지정하는 컨텍스트에서 str 의 Python 소스 코드를 globalslocals 객체에 의해 지정된 컨텍스트에서 실행합니다. globals 는 딕셔너리여야 하며, locals 는 맵핑 프로토콜을 구현하는 모든 객체가 될 수 있습니다. 매개 변수 start 는 시작 기호를 지정하며, 사용 가능한 시작 기호 중 하나여야 합니다.

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

PyObject *PyRun_File(FILE *fp, const char *filename, int start, PyObject *globals, PyObject *locals)
반환값: 새 참조.

아래 PyRun_FileExFlags()의 단순화된 인터페이스입니다. closeit0으로, flagsNULL로 설정된 상태로 남겨둡니다.

PyObject *PyRun_FileEx(FILE *fp, const char *filename, int start, PyObject *globals, PyObject *locals, int closeit)
반환값: 새 참조.

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

PyObject *PyRun_FileFlags(FILE *fp, const char *filename, int start, PyObject *globals, PyObject *locals, PyCompilerFlags *flags)
반환값: 새 참조.

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

PyObject *PyRun_FileExFlags(FILE *fp, const char *filename, int start, PyObject *globals, PyObject *locals, int closeit, PyCompilerFlags *flags)
반환값: 새 참조.

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

PyObject *Py_CompileString(const char *str, const char *filename, int start)
반환값: 새 참조. 상의 안정 ABI.

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

PyObject *Py_CompileStringFlags(const char *str, const char *filename, int start, PyCompilerFlags *flags)
반환값: 새 참조.

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

PyObject *Py_CompileStringObject(const char *str, PyObject *filename, int start, PyCompilerFlags *flags, int optimize)
반환값: 새 참조.

str 의 Python 소스 코드를 구문 분석하고 컴파일하여, 결과 코드 객체를 반환합니다. 시작 기호는 start 에 의해 지정되며; 이는 컴파일할 수 있는 코드를 제한하는 데 사용될 수 있으며 사용 가능한 시작 기호 여야 합니다. filename 이 지정하는 파일명은 코드 객체를 구성하는 데 사용되며, 트레이스백이나 SyntaxError 예외 메시지에 나타날 수 있습니다. 코드를 구문 분석하거나 컴파일할 수 없는 경우 NULL 을 반환합니다.

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

Added in version 3.4.

PyObject *Py_CompileStringExFlags(const char *str, const char *filename, int start, PyCompilerFlags *flags, int optimize)
반환값: 새 참조.

Py_CompileStringObject()와 유사하지만, filename파일시스템 인코딩과 에러 처리기로 디코딩된 바이트 문자열입니다.

Added in version 3.2.

PyObject *PyEval_EvalCode(PyObject *co, PyObject *globals, PyObject *locals)
반환값: 새 참조. 상의 안정 ABI.

이것은 코드 객체와 전역 변수 및 지역 변수만 있는, 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)
반환값: 새 참조. 상의 안정 ABI.

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

PyObject *PyEval_EvalFrame(PyFrameObject *f)
반환값: 새 참조. 상의 안정 ABI.

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

PyObject *PyEval_EvalFrameEx(PyFrameObject *f, int throwflag)
반환값: 새 참조. 상의 안정 ABI.

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

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

int PyEval_MergeCompilerFlags(PyCompilerFlags *cf)

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

struct PyCompilerFlags

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

PyCompilerFlags *flagsNULL일 때마다, cf_flags0과 같다고 취급되며, 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 필드를 추가했습니다.

사용 가능한 컴파일러 플래그는 다음 매크로로 접근할 수 있습니다:

PyCF_ALLOW_TOP_LEVEL_AWAIT
PyCF_ONLY_AST
PyCF_OPTIMIZED_AST
PyCF_TYPE_COMMENTS

이 상수들을 동일한 이름으로 내보내는 ast Python 모듈의 아스트 컴파일러 플래그\ 문서를 참조하세요.

위의 “PyCF” 플래그는 future statement <future>`을 사용하여 선택할 수 있는 기능을 활성화하기 위해 :c:macro:`CO_FUTURE_ANNOTATIONS 같은 “CO_FUTURE” 플래그와 결합될 수 있습니다. 전체 목록은 :ref:`c_codeobject_flags`에서 확인하세요.

사용 가능한 시작 기호

int Py_eval_input

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

int Py_file_input

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

int Py_single_input

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

int Py_func_type_input

함수 타입을 위한 파이썬 문법의 시작 기호; Py_CompileString()\과 함께 사용됩니다. 이는 :pep:`484`에서 “시그니처 타입 주석”을 구문 분석하는 데 사용됩니다.

PyCF_ONLY_AST 플래그가 설정되어야 합니다.

Added in version 3.8.

스택 효과

더 보기

dis.stack_effect()

PY_INVALID_STACK_EFFECT

유효하지 않은 스택 효과를 나타내는 센티넬 값입니다.

현재는 INT_MAX 와 같습니다.

Added in version 3.8.

int PyCompile_OpcodeStackEffect(int opcode, int oparg)

인자 oparg 를 사용한 opcode 의 스택 효과를 계산합니다.

성공 시, 이 함수는 스택 효과를 반환하며, 실패 시 :c:macro:`PY_INVALID_STACK_EFFECT`를 반환합니다.

Added in version 3.4.

int PyCompile_OpcodeStackEffectWithJump(int opcode, int oparg, int jump)

PyCompile_OpcodeStackEffect() 와 유사하지만, jump 가 0인 경우 점프 효과는 포함하지 않습니다.

jump0 이면 점프 효과를 포함하지 않지만, jump1 또는 -1 이면 포함합니다.

성공 시, 이 함수는 스택 효과를 반환하며, 실패 시 :c:macro:`PY_INVALID_STACK_EFFECT`를 반환합니다.

Added in version 3.8.

분실물 보관소