PYTHON

실전 swig

고요한하늘... 2006. 9. 5. 14:43

 

아래 보이는 코드가 간단하게 보이겠지만 이런 결과를 얻기 위해서 수많은 테스트를 거쳐야 했다.

우선 모듈명을 space로 하면 so는 _space로 해야 한다. 정확히 하기위해서는

swig -python space.i 실행하고 생성된  space_wrap.c에 모듈명을 확인해보면 된다.

 

가장 고생한 부분은

high_spacing() 이함수의 입력과 출력이 모두 char*였는데 출력 부분에서 문제가 발생했다. char*는 파이선으로 되면서 string으로 변환되는데 string형은 불변형이기 때문에 writing이 되지 않아 문제가 되는것 같았다.

그래서 하는수 없이 출력은 return으로 받아서 처리했다.

 

관련 자료가 있으니 필요한 분은 아래 메일 주소와 함께 글을 남기면 보내주겠다.

 

 

 

%module space
%{
    #include "space.h"
%}
    extern int  initspace();
    extern char *high_spacing(char  *iin);
    extern int  search_trie(char *keyword, char *result);
    extern int  open_trie(char *fn);
    extern char *deletespace(char   *input, int  *size);
    extern char *strlcat(char   *dst, const char    *src, size_t    *limit);
    extern int  close_trie();

 

 

 

 

#/bin/sh


swig -python space.i
gcc -c ../src/space.c space_wrap.c -I/usr/include/python2.3 -I../include
ld -shared space.o space_wrap.o -o _space.so

 

 

#!/usr/local/bin/python2.4
import _space

_space.open_trie("/data2/jchern/hps/trie/all.trie");
while 1:
    query=raw_input();
    print _space.high_spacing(query);
_space.close_trie()

'PYTHON' 카테고리의 다른 글

파이선 디버깅  (0) 2008.03.24
MapReduce  (0) 2007.02.26
tcp ip 통신으로 특정 프로그램(shell) 실행시키기  (0) 2006.09.04
문자열 포맷팅  (0) 2006.08.28
anydbm  (0) 2006.08.25