본문 바로가기

미래 먹거리를 위하여

[파이썬 정복하기] 라이브러리 11장 - 운영체제 다루기3 (맥OS 기준) — 운영체제와 상호작용하는 고급 기능 platform, ctypes

OS: MAC

참고: 👉 점프 투 파이썬 - 라이브러리 예제 바로가기

064. 시스템 정보를 알아보려면? ― platform(플랫폼)

 

  • 설치 스크립트에서 시스템 종류에 따라 분기 처리할 때
  • 프로그램 로그에 실행 환경 기록
  • 디버깅 시 OS / Python 버전 확인
  • 배포 시 시스템 호환성 체크

 

구분 설명 예시 결과
운영체제(OS)
이름 확인
현재 실행 중인
OS 종류를 반환
import platform
print(platform.system())
Darwin
# Mac
운영체제
상세 정보
OS 버전, 빌드 번호 등
전체 정보를 반환한다.
import platform
print(platform.platform())
macOS-26.1-arm64-arm-64bit-Mach-O
Python
버전 확인
실행 중인 파이썬 버전을
문자열로 반환
import platform
print(platform.python_version())
3.13.2
프로세서
(CPU) 정보
CPU 모델명을 반환한다. import platform
print(platform.processor())
arm
머신 종류 하드웨어 아키텍처 정보를 반환 import platform
print(platform.machine())
arm64
노드
(컴퓨터 이름)
컴퓨터 이름(hostname) 반환 import platform
print(platform.node())
유저네임-ui-MacBookAir.local
전체
시스템 정보
OS, 버전, CPU 등 종합 정보 import platform
print(platform.uname())
uname_result(system='Darwin', node='...', ... machine='arm64')

라이브러리 예제 문제: 지금 사용하는 컴퓨터 사양을 알고 싶다. 사용 중인 시스템의 CPU와 OS 정보를 출력하는 프로그램은 어떻게 만들어야 할까?

점프 투 파이썬 - 라이브러리 예제 편 11장 64번 문제 풀이 및 결과

 

065. C로 만든 라이브러리를 사용하려면? ― ctypes(씨타입스)

- C로 만든 함수(dll/so)를 파이썬 코드에서 직접 부르는 어댑터

구분 설명 예시 결과
모듈 임포트 C 함수 쓰기 위해
ctypes 모듈을 불러온다.
import ctypes 모듈 로드
(화면 출력 없음)
ctypes 예시를
실행하기 위한
mylib.so 파일
생성


1단계:
C 코드 만들기 (mylib.c)
① 유저 폴더로 이동
터미널 실행 > 파일을 생성할 폴더로 이동 > 코드 입력
cd /Users/유저네임

② mylib.c 만들기
nano mylib.c 입력 > 편집기 열림 > 코드 입력

// mylib.c
int add(int a, int b) {
    return a + b;
}

③ 저장하기
Ctrl + O→ 엔터 (저장) > Ctrl + X (편집기 종료)

mylib.c 파일 생성
2단계:
macOS에서 C 파일 컴파일해서 .dylib 만들기
터미널 실행 > 코드 입력
gcc -dynamiclib -o mylib.dylib mylib.c
mylib.dylib
파일 생성
3단계:
Python에서 ctypes로 로드하기
파이썬 실행 > 코드 입력

import ctypes
lib = ctypes.CDLL("/Users/유저네임/mylib.dylib")
print(lib.add(3, 5))

8
C 라이브러리
불러오기
.dll(Windows),
.so(Linux),
.dylib(macOS) 같은
C 라이브러리를 로드한다.
# 예: C에서 만든 mylib.so 불러오기
import ctypes
lib = ctypes.CDLL("./mylib.dylib") # 또는 .dll, .so
lib 객체에
C 함수들이 담겨 있음
간단한
C 함수 호출
인자가 없고 정수 하나만 반환하는 함수 호출 예 # C 코드 예시 (개념) # int get_num() { return 42; }
import ctypes
lib = ctypes.CDLL("./mylib.dylib")
result = lib.get_num()
print(result)
42 출력
인자(파라미터) 있는 함수 호출 C 함수의 인자 타입 / 반환 타입을 argtypes, restype 으로 지정해야 안전하다. # C 코드 (개념) # int add(int a, int b) { return a + b; }
import ctypes
lib = ctypes.CDLL("./mylib.dylib")
lib.add.argtypes = (ctypes.c_int, ctypes.c_int)
lib.add.restype = ctypes.c_int
result = lib.add(10, 32)
print(result)
42
C의 기본
타입 매핑
C 타입을 파이썬에서
표현하기 위한 타입들.
# C의 int / double / char* 에 해당

from ctypes import CDLL, c_int, c_double, c_char_p
lib = CDLL("./mylib.dylib")

# C 함수 선언: int add(int, int);
lib.add.argtypes = (c_int, c_int)
lib.add.restype = c_int

출력값 없음(정상)

C 함수 인자/반환 타입 지정할 때 사용
플랫폼 기본 라이브러리 사용(예: C 표준 라이브러리) OS에 이미 있는 C 라이브러리도 불러서 사용 가능. import ctypes
import platform

# OS에 따라 다른 libc 파일 로드
if platform.system() == "Darwin":          # macOS
    libc = ctypes.CDLL("libc.dylib")
elif platform.system() == "Linux":
    libc = ctypes.CDLL("libc.so.6")
else:
    raise OSError("지원하지 않는 운영체제입니다.")

# printf 함수 인자 타입 설정 (char*)
libc.printf.argtypes = [ctypes.c_char_p]

# C의 printf 호출
libc.printf(b"Hello from C!\n")
Hello from C!
14

# 문자열 길이도 반환됨(정상)

라이브러리 예제 문제:

점프 투 파이썬 - 라이브러리 예제 편 11장 65번 문제

 

신기하게도 예시에서 똑같은 수식의 파일을 생성해서 파일명만 수정해서 풀이를 진행.

점프 투 파이썬 - 라이브러리 예제 편 11장 65번 문제 풀이 및 결과