본문 바로가기
아래아한글 자동화/python+hwp 중급

한/글 메서드별 인자 확인하는 방법(feat. ipython)

by 일코 2021. 1. 27.
FileName 과 filename 사이에서 고민하고 있는 "회사원코딩"의 수강생입니다. ^^;

다음 내용을 좀 더 상세히 알 수 있을까요?
어떻게 docstring을 통해 대소문자 점검을 할 수 있는지?
미리 어떤 인자가 파라미터로 사용할 수 있는지? 알수 있는 방법에 대해 조언 부탁드립니다.


"""
API문서를 한/글2010 이후로 10년간 업데이트하지 않았기 때문이기도 하고,

또다른 이유로 win32의 MakePy문제로 일부 메서드의 파라미터는 한/글 내부 스크립트와 대소문자에 차이가 생긴다. FileName이 파이썬에서는 filename으로 바뀐다든지 하는 식이다. 다행히 이런 경우는 "어느 파라미터가 존재하지 않는다"는 오류메시지가 나오고, docstring을 통해 대소문자 점검을 해 주면 된다.
"""

 

관심갖고 포스팅 읽어주시고 잘못된 부분도 지적해주신 독자 분께서
(이 자리를 빌어 다시 한 번 감사드린다는 말씀을 전하고 싶다)
댓글로 문의를 남겨주셨는데, 간단하다면 간단한 답변이지만,
성의를 보이고 싶은 마음에, 상세하게 적어보고자 한다.
아실 분들은 아시는 내용인 것 같아 "노하우"라고 부르긴 좀 머쓱하지만,
하여튼 필자는 잘 활용하고 있는 방법이다.

우선 지나가다님께서 남겨주신 질문,

1. 어떻게 docstring을 통해 대소문자 점검을 할 수 있는지?

파이썬 콘솔(아마 아나콘다를 사용한다면, 대부분 ipython을 사용할 것이라 믿는다.)에서
메서드 뒤에다가 ?를 붙이면 docstring이 출력되고, ??를 붙이면 메서드를 정의한 코드가 출력된다.

주황색 네모 안에 RegisterModule의 인자명이 들어가 있다.
??를 붙이고 엔터를 누르면 소스까지 출력된다.

이렇게 인자명을 확인할 수 있다. 그런데...

2. ??가 왜 필요할까?

스크립트매크로로 녹화한 코드를 파이썬으로 옮겨서 실행하거나, 
API매뉴얼에 적힌대로 메서드를 실행했는데, 오류가 발생하는 경우가 종종 있다.
간단한 예로 hwp.SaveAs를 들어보자.

API매뉴얼에는,

API매뉴얼의 매개변수는 이렇게 소문자로만 기록되어 있지만..

그런데 파이썬에서 한/글 인스턴스를 생성한 후 SaveAs 메서드의 docstring을 조회해보면,

arg를 제외한 두 개의 인자의 첫글자가 대문자이다(!!???)

각각 [Path, Format, arg]로, arg를 제외한 두 개의 인자의 첫글자가 대문자이다. 
'매뉴얼에 오타가 난 거 아닌가?' 생각할 수 있지만 그렇지 않다.
필자도 생소했던 부분인데,

예를 들면 "다른이름으로 저장Alt-V"을 스크립트매크로로 녹화한 코드의 일부는 아래와 같다.

	HAction.GetDefault("FileSaveAs_S", HParameterSet.HFileOpenSave.HSet);
	with (HParameterSet.HFileOpenSave)
	{
		FileName = "C:\\Users\\smj02\\Desktop\\Hello World.hwp";
		Format = "HWP";
	}
	HAction.Execute("FileSaveAs_S", HParameterSet.HFileOpenSave.HSet);

이 코드를 직접 파이썬 코드로 변경해보겠다.

[클릭] 스크립트매크로 녹화 코드를 파이썬 코드로 변경하는 과정

변환작업은 간단한데, 실행해 보면 다음과 같은 오류가 발생한다.

오류메시지가 무지 상세하다. 디버깅할 게 아닌 이상 다 읽을 필요는 없고;; 제일 아랫줄만 읽어보자.

HFileOpenSave에 "FileName"이라는 속성이 없다고 한다.

3. 지금이다. ??를 써먹어보자.

위에서 알려드린 코드출력 기능인 "??"를 사용해서 코드를 출력해보자.

인자가 나오는 "_prop_map_get_" 을 정의하는 부분까지 스크롤을 내려보자.
소스 중간에 "_prop_map_get_ = {~" 하는 부분에 인자명이 들어있다.

"FileName"은 온데간데 없고, 제일 아래에 "filename"이 떡하니 적혀 있다.
그래서 위의 소스코드를 참고해서,
방금 오류가 발생했던 "다른이름으로 저장" 코드의 "FileName"을 "filename"으로 고치고 재실행하면
아래처럼 정상적으로 저장된다.

"다른 이름으로 저장"이 정상적으로 실행되고 True를 리턴했다.

 

4. 모든 메서드를 조회할 수 있을까?

예전에도 이 부분을 물어보시는 분들이 종종 있었다. 필자가 읽는 API매뉴얼은 한/글2010 때 만들어진 건데, 한/글2020이 나온 지금 추가된 메서드 목록은 도대체 어떻게 알 수 있을까?

결론부터 말씀드리면 메서드와 파라미터는 모두 조회 가능하다.
다만, 단축명령어 hwp.Run() 메서드 안에 들어가는 액션아이디는 조회할 수 없었다.

혹시 아시는 분께서, 공유해 주시면 사례드리고 싶다.

하여튼, 여러분의 PC에 아나콘다가 설치되어 있거나, pywin32 모듈을 설치했다면, 대략

c:\...\파이썬설치폴더\Lib\site-packages\pythonwin\Pythonwin.exe

Pythonwin.exe 파일을 실행하자.

이 파일을 실행해서,

Tools - COM Makepy utility 를 선택한다.

Tools - COM Makepy utility를 실행하면 Select Library 창이 뜨는데,
거기에서 "HwpObject 1.0 Type Library (1.0)" 를 고르고 OK 버튼을 누르자.

HwpObject 1.0 Type Library (1.0)  선택 후 OK
이런 메시지가 나오면 끝. "Import completed" 같은 메시지가 나오지는 않으니 기다리지는 말자.

0.1초 정도 걸린다는 점을 감안하자. 따로 완료메시지가 뜨지는 않는다. 
상단에 Generating to C:\~~ 경로로 찾아가서,
"7D2B6F3C-1D95-4E0C-BF5A-5EE564186FBCx0x1x0.py"를 열어보면
모든 메서드에 대한 바인딩(?) 코드가 파이썬으로 만들어져 있다.
필자도 모든 구조를 이해하는 건 아니지만, 메서드와 파라미터 목록을 찾는데는 조금씩 활용한다.

한 가지 아쉬운 것은, 파라미터의 타입이 무엇인지까지는 알 수 없으므로,
경험상 매뉴얼에 없는 메서드는 찾아서 활용하기 힘들다고 생각한다.

위에서 기술한 것처럼,
매뉴얼대로 따라했는데 실행이 안되거나,
녹화한 스크립트매크로 코드를 파이썬으로 옮겼는데 오류가 발생하는 정도의 문제
해결할 수 있는 용도로만 사용하고 있다.

(MakePy의 더 훌륭한 활용방법에 대해 알려주시는 분께도 사례드리고 싶다.)

이번 포스팅은 여기서 마친다.

긴 글 읽어주셔서 감사드리며,
부디 궁금증을 해결하셨기를 바란다.

행복한 하루 되시길!

 

 


donaricano-btn

댓글