os 모듈의 system, popen* 함수를 지워야 할 일이 있어서 Python 소스의 거의 절반을 뜯어본 결과.. 답은 은근히 쉬웠다.

os 모듈의 파이썬 소스(Lib/os.py)에 들어있지 않은 함수들은 Modules/posixmodule.c 에 들어있는데, 거기서 지우고 싶은 함수를 찾아서 함수등록하는 변수에서 해당하는 함수의 줄을 주석처리 해주면 된다.

(파이썬은 C 언어 기반이기 때문에, 부득이하게 system 함수나 popen 함수, socket 라이브러리등은 파이썬으로 작성할 수 없기 때문에 C 언어를 쓴다. 그래서 꽤나 고생했다)

파이썬 C 모듈에서 함수를 등록하는 변수는
static PyMethodDef (name)_methods[] = {
형식인데,

os 모듈에서는
static PyMethodDef posix_methods[] = {
이다.

예를들어 system 함수를 지우고 싶으면
    {"system",    posix_system, METH_VARARGS, posix_system__doc__}
를 주석처리,

nice 함수를 지우고 싶으면
{"nice",        posix_nice, METH_VARARGS, posix_nice__doc__},
를 주석처리 해주면 된다.

그리고 재컴파일하고 make install 해주면 끝.

이렇게 하기 귀찮으면, Lib/os.py 맨 밑에 del system, popen 해도 되긴하지만, 꼼수가 많기 떄문에 불안하기 때문에 C 소스에서 바로 날려버리는게 속 편하다.

댓글을 달아 주세요