파이썬, ctypes를 이용한 C 프로그램 호출
글. 수알치 오상문
1. C 프로그램 작성, myclib.c
#include <stdio.h>
void display() {
printf("Hello, world!\n");
}
char* display2(char* name, int age) {
printf("Your name is %s\n", name);
printf("Your age is %d\n", age);
return "OK";
}
2. C 프로그램을 공유 라이브러리로 빌드
gcc -fPIC -shared -o myclib.so myclib.c
정상 빌드되면 myclib.so 공유 라이브러리 파일이 생깁니다.
3. 파이썬 코드 작성, main.py
import platform
import ctypes
# 현재 운영체제 확인
# 한글 인코딩 시 운영체제에 맞게 변환하기 위하여 현재 운영체제를 확인합니다.
current_os = platform.system()
clib = ctypes.CDLL("./myclib.so") # ctypes.CDLL("/project_python/ctypes_c_call/myclib.so")
clib.display() #
clib.display2(b"sangmun", 500) # 문자열 전달 시 바이트 코드로 전송! 한글은 에러남
if current_os == "Windows":
clib.display2("상문".encode("ansi"), 500) # Windows
elif current_os == "Linux":
clib.display2("상문".encode("utf-8"), 500) # Linux
cfunc = clib.display2
cfunc.argtypes = [ctypes.c_char_p, ctypes.c_int] # 함수 전달인수 형
cfunc.restype = ctypes.c_char_p # 함수 반환 형
ret = cfunc(b"sangmun", 500)
print(f"Return Value is {ret}")
4. 파이썬 코드 실행
IDLE에서는 메시지가 안 보일 수 있습니다.
콘솔에서 실행합니다.
python main.py <-- 또는 python3 main.py
[실행 결과]
Hello, world!
Your name is sangmun
Your age is 500
Your name is 상문
Your age is 500
Your name is sangmun
Your age is 500
Return Value is b'OK'
'Python 활용' 카테고리의 다른 글
파이썬, JSON Schema Validation (0) | 2023.11.05 |
---|---|
파이썬에서 Go 함수 호출하기 (0) | 2023.10.30 |
파이썬, C 공유 라이브러리 이용 (0) | 2023.10.29 |
2023, 파이썬 유용한 라이브러리 (0) | 2023.10.25 |
Python + Cython 두 번째 글 (1) | 2023.10.13 |