메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

한빛랩스 - 지식에 가능성을 머지하다 / 강의 콘텐츠 무료로 수강하시고 피드백을 남겨주세요. ▶︎

IT/모바일

파이썬 옵션

한빛미디어

|

2002-04-11

|

by HANBIT

9,289

저자: 스티브 피긴스, 역 전순재

유닉스 사용자는 명령어 라인의 파워를 알고 있다. 명령 라인에서는 인수를 함수에 넘겨줄 때처럼 쉽게 인수를 애플리케이션에 넘겨 줄 수 있다. 표준 유닉스의 관례는 인수를 넘겨줄 때 "- 또는 --"처럼 인수를 앞에 놓는 것이다. 예를 들어 어떤 옵션은 -f--file와 같이 여러 가지 방식으로 지정될 수 있다. 또 어떤 옵션은 GNU의 tar처럼 결합되어 -xvfz와 같이 사용되어, 압축된 파일을 자세한 설명을 하면서 풀어 낸다. 옵션이 많으면 많을수록 더 많은 코드가 그 옵션들을 적절하게 해석(parse)하는데 필요하다. 옵션은 구현하기 쉽다. 게다가 파이썬은 getopt 모듈을 가지고 있어서 여러분이 지정한 인수들을 열람하고 그 인수들을 리스트에 배정한다.

옵션을 해석(Parsing)하고 처리하는 것이 너무나 간단하기 때문에 그레그 워드(Greg Ward)가 커맨드라인 해석 라이브러리인 Optik을 선언했을 때 필자는 그에게 왜 고생을 사서 하느냐고 물어 보았다. 이 질문에 그는 다음과 같이 대답했다. "문제는 본질적으로 그렇게 하는 어려워서가 아닙니다. 오히려 너무 쉽다는 것입니다. 즉, 어떤 바보라도 sys.argv에 대해 루프를 코드할 수 있습니다. Optik에서 사용한 트릭은 바로 이 루프를 말쑥한 사용자 인터페이스로 전환시키고 재사용할 수 있도록 루프를 코딩하는 것입니다. 작성하는 스크립트마다 sys.argv에 대하여 똑같은 루프를 코딩한다면 단기간 내에 구형이 되어 버리며, 아마도 이 때문에 Optik 모듈이 유닉스 공동체에서 가장 뛰어나게 고안된 발명품이 되지 않을까 싶습니다."

도대체 getopt 모듈에 뭐가 잘못된 것인가? "기능이 충분하게 발휘되지 않습니다"라고 워드는 말한다. "getopt 모듈이 하는 일이라고는 "sys.argv에 대한 루프"를 "sys.argv에서 발견되는 옵션에 대한 루프"로 변환하는 것이 모두라고 할 수 있지요. 여러분은 작성하는 스크립트마다 여전히 그 루프를 코딩해야 할 겁니다. 파이썬 표준 라이브러리에 있는 getopt 모듈이 주는 이점이라면 -와 --의 수 많은 다른 의미에 대하여 걱정할 필요가 없다는 것일 뿐입니다."

워드(Ward)가 옵션을 재고안한 것이 이번이 처음은 아니다. 그는 Distutils에서 볼 수 있는 fancy_getopt 모듈을 작성했고, CPAN에서 구할 수 있는 Getopt::Tabular 펄 모듈을 작성했으며, 공개적으로 배포되지 않은 기타 몇 가지 다른 모듈을 작성하였다. 그리고 그 중에 하나가 Optik의 직접적인 선구자가 된 것이다.

Optik이 특별한 이유이자 Optik을 특별하게 만들었던 이유는 워드(Ward)가 형(types)과 행위(actions)를 분리했기 때문이었다. 워드(Ward)는 형을 사용하여 매개변수가 어떤 종류인지 지정한다. 1996년으로 돌아가 워드의 말에 따르면 Getopt::Tabular 모듈에서 너무 많은 타입을 요구했었는데, 이때 예를 들어 리스트와 같은 더욱 복잡한 형들을 지원하고자 했다고 한다. Optik으로는 문자열, 정수 또는 실수라는 오직 세 가지 타입만 기본으로 가진다. 더 많은 타입을 원하면(예를 들어 "file"이라는 형을 만들고자 한다면), Option 클래스를 하부클래스화 할 수 있다.

그렇지만 너무 자주 그럴 필요는 없을 것이다. 왜냐하면 2001년 말경에 워드(Ward)가 자신의 타입을 간단하게 유지하는 해결책을 찾아냈기 때문이다. 동작(actions)이 바로 그것이다. 동작(Actions)은 옵션으로 무엇을 해야 하는지 지정해준다. 어쩌면 옵션을 저장하거나, 옵션을 리스트에 추가하거나, 카운터를 증가시키거나, 심지어 역호출 함수를 요청하기도 한다. 역호출(Callbacks)은 선택사항이 가변 개수의 인수를 취해야 할 경우 특히 편리하다. 동작(Actions)을 확장할 수도 있다.

기본 타입과, 동작, 역호출 함수, 그리고 타입과 동작을 확장하는 능력간에, Optik은 유연하게 아주 복잡한 옵션 집합을 처리할 수 있다. Optik의 완벽하고 세련된 느낌 외에도, Optik과 관련하여 워드(Ward)가 작서한 문서는 최고라 할만하다. 그 문서로 쉽게 Optik을 시작할 수 있기 때문이다.

일부 옵션에 대한 구문을 간단하게 해주는 기본 타입과 의도는 확장법을 보여주는 예제가 담긴 예제 디렉토리와 함께 1.2.1 배포본에서 달성될 것이다. 워드(Ward)는 가장 많은 요구가 있었던 특징들을 확장으로 구현할 계획을 하고 있다. 이 계획은 잘 갖추어진 풍부한 모듈에 약간의 변경만 가해주면 된다. 필자는 Optik이 조만간 파이썬 표준 라이브러리로 성공적으로 진입하리라고 확신한다.
TAG :
댓글 입력
자료실

최근 본 상품0