Python은 굉장히 유용한 스크립트 언어입니다.
텍스트처리, 프로토타입 개발, 다른 언어간의 연결 등 다양한 분야에서 널리 쓰이고 있는 강력한 언어인데요
Python으로 COM 객체를 다루는 방법을 이야기해보겠습니다.
준비물 : 대신증권 계좌
1. Python 2.x 다운로드
먼저 Python을 다운로드 받습니다. Python은 2버전과 3버전이 서로 다른데요, 오늘은 2버전을 쓰겠습니다. (3버전은 Python 제작자인 귀도 반 로섬이 하위호환성을 버리고 만드는 버전이고, 2버전은 3버전에서 만들어지는 신 기능을 차근차근 업데이트하며 따라오는 중입니다)
http://www.python.org/download/releases/2.7.6/
2. Pyyhon Windows extension 다운로드
2.7 버전 지원파일을 다운로드 받습니다. 현재 최신버전은 빌드 218이니 이걸 다운로드 받겠습니다.
http://sourceforge.net/projects/pywin32/files/
3. 이클립스를 하나 별도로 설치
안드로이드도 이클립스, 스프링도 이클립스... 이클립스는 대세입니다. (그리고 무료)
설정이 너무 겹치면 싫으니까 파이썬 용으로 이클립스를 따로 하나 설치합니다.
https://www.eclipse.org/downloads/
4. 이클립스에 파이썬 플러그인 설치
이클립스 실행 후 Help - Eclipse Market Place에서 PyDev를 설치합니다.
설치 후 이클립스가 재시작됩니다. 그러면 Windows - Preference - PyDev - Interpreter 를 선택합니다.
New 를 선택한 뒤 이름은 Python2.7.6을 선택해 주고, 경로에 아까 설치된 파이썬의 경로를 입력한 뒤 OK를 누릅니다.
5. 새 프로젝트
Package Explorer - 우클릭 - New - PyDev - PyDev Project를 선택하여 새 프로젝트를 생성합니다.
잘 설치가 되는지 시험삼아 Hello World를 출력해 봅니다.
콘솔에 Hello 가 찍히는 걸 보니 성공입니다.
참고로, 한글을 입력하기 위해서는 소스코드 맨 위에 아래 문자열을 추가해 주어야 합니다.
#-*- coding: euc-kr -*-
6. 대신증권 COM 다운로드
오늘 이용할 COM 은 대신증권에서 제공하는 증권 com 입니다.
일단 Cybos5를 다운로드 받습니다.
그리고 도움말 파일도 필요하니, 다운로드 받도록 하겠습니다.
Cybos5를 실행한 뒤, CybosPlus 탭을 선택한 뒤 로그인 합니다. 이 과정에서 우리가 필요한 cpdib.dll 파일이 다운로드 됩니다. (물론 대신증권 계좌는 미리 준비해야 합니다)
7. COM 라이브러리의 python interface를 생성합니다.
서로 다른 언어에서 라이브러리를 호출하기 위한 인터페이스 정도로 생각하시면 됩니다.
C:\Python27\Lib\site-packages\win32com\client\makepy.py 를 실행하면 선택창이 나오는데,
그중 아래의 4개 dll을 선택합니다.
CpDib, CpSysDb, CpTrade, CpUtil
C:\Python27\Lib\site-packages\win32com\gen_py 에 결과물이 생성되는데, 신경쓸 필요는 없습니다.
8. 프로그래밍을 해봅니다.
import win32com.client stockmst = win32com.client.Dispatch("dscbo1.StockMst") stockmst.SetInputValue(0, "A005930") retval = stockmst.BlockRequest() cost = stockmst.GetHeaderValue(11) print "cost : " + str(cost) cost = stockmst.GetHeaderValue(1) print "cost : " + cost
참고 : dispatch 할 모듈은 아래와 같이 이름이 붙습니다.
cpdib : dscbo1.xxxx
cpsysdib : cpsysdib.xxxx
cputil : cputil.xxxx
결과 :
pywintypes.com_error: (-2147352567, '\xbf\xb9\xbf\xdc\xb0\xa1 \xb9\xdf\xbb\xfd\xc7\xdf\xbd\xc0\xb4\xcf\xb4\xd9.', (0, None, u'U-CYBOS\uac00 \uc11c\ubc84\uc5d0 \uc811\uc18d\ub418\uc5b4 \uc788\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.', None, 0, -2147483638), None)
http://unicode.online-toolz.com/tools/text-unicode-entities-convertor.php
pywintypes.com_error: (-2147352567, '¿¹¿Ü°¡ ¹ß»ýÇß½À´Ï´Ù.', (0, None, u'U-CYBOS가 서버에 접속되어 있지 않습니다.', None, 0, -2147483638), None)
접속이 되어있지 않다고 해서 온갖 삽질을 해보았는데... 안랩 방화벽도 건드려보고 이것저것 해보았으나 실패.
아래와 같은 내용을 발견했습니다.
안녕하세요 사이보스 플러스 담당자입니다. 죄송하지만 파이썬 언어에 대해서는 저희측에서 지원해 드릴 수 없습니다. 감사합니다. ================================================== import win32com.client stockmst = win32com.client.Dispatch("dscbo1.StockMst") stockmst.SetInputValue(0, "A000660") retval = stockmst.BlockRequest() 위와 같이 실행하였는데 blockrequest 부분을 실행하면 아래와 같은 에러가 발생합니다. 실행할때마다 안랩 방화벽 프로그램이 브라우저 보안 이라는 메세지 출력하고 사라지는데 이거랑 상관 있을까요? 감사합니다. Traceback (most recent call last): File " retval = stockmst.BlockRequest() File " com_error: (-2147352567, 'Exception occurred.', (0, None, u'U-CYBOS\uac00 \uc11c\ubc84\uc5d0 \uc811\uc18d\ub418\uc5b4 \uc788\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.', None, 0, -2147483638), None) |
아... 망할.....
그러나, 곧 다시 아래와 같은 내용을 발견했습니다.
다른컴퓨터는 Windows7을 깔아서 해도 잘 되는데 이상하게 이 컴퓨터만 자꾸 이러네요..답답해서 포맷을 해봐도 똑같더군요 처음 Windows7을 깔면서 공인인증서를 저장해놓지 못해서 재발급을 받았는데 그것때문인가요?도통 이유를 모르겠네요. 답변 부탁드릴게요
답변1 안녕하십니까? cp개발팀입니다. Win7에서는 보안사항 때문에 프로세스간의 통신이 안될수도 있습니다. U-CYBOS가 어드민으로만 실행할 수 있습니다. 가장 쉽게는 UAC를 끄시는 것도 방법입니다. UAC를 끄는 방법은 제어판 -> 사용자 계정 -> 사용자 계정 컨트롤 사용/사용 안 함 -> 사용자 계정 컨트롤을 사용하여 컴퓨터를 보다 안전하게 보호의 체크를 없애면 됩니다 감사합니다. |
그래서 제어판에 들어가서 사용자계정 - 사용자계정 컨트롤 설정 변경 - 끄기 를 해줬습니다.
그랬더니......
성공입니다.
참고 사이트 :
http://algomarket.wikidot.com/cybos-com-event-processing
'Python' 카테고리의 다른 글
다운받은 유튜브 자막을 smi로 만들기 (2) (0) | 2014.04.04 |
---|---|
다운받은 유튜브 자막을 smi로 만들기 (0) | 2014.03.12 |