pyimport_importmodule 예제

모든 실패한 malloc() 호출은 예외로 전환되어야 합니다 – malloc(또는 realloc())의 직접 호출자는 PyErr_NoMemory()를 호출하고 실패 표시기 자체를 반환해야 합니다. 모든 개체 만들기 함수(예: PyLong_FromLong()))는 이미 이 작업을 수행하므로 이 메모는 malloc()을 직접 호출하는 사용자만 관련이 있습니다. 이제 만든 환경을 사용하여 함수를 호출하고 원하는 시간에 스크립트를 실행할 수 있습니다. 데이터 전송 루틴을 사용하여 포함된 Python 인터프리터의 주 네임스페이스에서 변수를 전달하고 검색할 수 있습니다. 다음은 간단하지만 완전한 예제로 컴파일하여 시도해 볼 수 있습니다: C 함수 호출 메커니즘은 C 함수(예제의 args)에 전달된 인수 목록이 NULL이 아니라는 것을 보장합니다. [4] 나는 코드의이 조각이 다른 예제의 나머지 부분보다 훨씬 더 놀라운 보인다 인정해야하지만, 복잡성의 대부분은 hashlib 모듈에서 가져올 객체의 이름을 보유 하는 파이썬 목록의 생성에 있다 을 사용하지 않습니다. PyRun_SimpleString()에서 실행할 문자열에는 이미 파이썬 C API에 의해 추가된 해시리브 가져오기 md5, sha1이 포함되지 않습니다. 우선, 파이썬 C API는 매우 유연하고 사용하기 쉽습니다. 먼저 Py_Initialize() 함수를 사용하여 파이썬 엔진을 초기화한 다음 파이썬으로 수행해야 하는 작업을 수행한 다음 마지막으로 Py_Finalize()를 사용하여 정리합니다. 다음 코드는 Python 콜백 함수에 원하는 인터페이스에 따라 전체 접근 방식의 최소 예이며 PyObject_CallObject()에 인수 목록을 제공해야 할 수도 있습니다. 경우에 따라 인수 목록은 콜백 함수를 지정한 동일한 인터페이스를 통해 Python 프로그램에서도 제공됩니다. 그런 다음 함수 개체와 동일한 방식으로 저장하고 사용할 수 있습니다.

다른 경우에는 인수 목록으로 전달하기 위해 새 튜플을 구성해야 할 수도 있습니다. 이 작업을 수행하는 가장 간단한 방법은 Py_BuildValue()를 호출하는 것입니다. 예를 들어, 정수 이벤트 코드를 전달하려는 경우 다음 코드를 사용할 수 있습니다: 예제 함수로 돌아가면 이 문을 이해할 수 있습니다: 파이썬의 인수 목록에서 간단한 번역이 있습니다(예: 단일 식 « ls-l »)을 C 함수에 전달된 인수에 전달합니다. C 함수에는 항상 두 개의 인수가 있습니다. C 확장 인터페이스는 CPython에만 해당되며 확장 모듈은 다른 파이썬 구현에서 작동하지 않습니다. 대부분의 경우 C 확장 작성을 방지하고 다른 구현에 대한 이식성을 유지할 수 있습니다. 예를 들어 사용 사례가 C 라이브러리 함수 또는 시스템 호출을 호출하는 경우 사용자 지정 C 코드를 작성하는 대신 ctype 모듈 또는 cffi 라이브러리를 사용하는 것이 좋습니다. 이 모듈을 사용하면 C 코드와 인터페이스하기 위해 파이썬 코드를 작성할 수 있으며 C 확장 모듈을 작성하고 컴파일하는 것보다 파이썬 구현 사이에 더 이식성이 있습니다. 나중에 함수를 호출할 때가 되면 C 함수 PyObject_CallObject()를 호출합니다.

이 함수에는 임의의 파이썬 개체에 대한 포인터인 파이썬 함수와 인수 목록이라는 두 개의 인수가 있습니다. 인수 목록은 항상 튜플 개체여야 하며 길이는 인수 수입니다. 인수없이 Python 함수를 호출하려면 NULL 또는 빈 튜플을 전달합니다. 하나의 인수로 호출하려면 싱글 톤 튜플을 전달합니다. Py_BuildValue()는 형식 문자열이 괄호 사이에 0 개 이상의 형식 코드로 구성된 경우 튜플을 반환합니다.