본문 바로가기

Python

COM 객체를 Python에서 이용하기 + Python Eclipse 에서 Hello World

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 입니다.

http://www.daishin.co.kr/


일단 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 "", line 1, in 
retval = stockmst.BlockRequest() 
File "", line 2, in BlockRequest 
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

http://jtrade.tistory.com/entry/3-Cybos-%EA%B8%B0%EB%B3%B8-%ED%95%A8%EC%88%98-%EC%82%AC%EC%9A%A9%ED%95%B4%EB%B3%B4%EA%B8%B0