2011-01-09 2 views
2

하위 명령에 대한 "도움말"을 처리하고 제공 할 수있는 명령 줄 프로그램을 개발하고 싶습니다. 구체적으로 말하자면, "cgent"라는 단일 스크립트가 있고 "abc", "def"및 "xyz"부속 명령을 실행하여 optparse 처리를 위해 나머지 sys.args를 허용하고 싶다고 가정하십시오.자동으로 명령 줄 프로그램의 "명령"을 파이썬에 등록하십시오.

 
cgent abc [options] 
cgent help abc 
.... 

하위 명령 이름을 하드 코딩하면이 모든 작업이 간단합니다. 그러나 클래스 나 모듈 (?)을 추가하여 하위 명령을 계속 추가하고 싶습니다. 이는 예를 들어 제어기 추가를 위해 웹 프레임 워크에서 사용되는 개념과 유사합니다. 나는 거기에서 끝내는 것을 재창조 할 수 있는지 지켜보기 위해 철탑을 파고 들었다. 그러나 나는 그 논리를 풀지 않았다. 이 작업을 수행하는 방법에 대한 제안 사항은 무엇입니까?

감사합니다, 숀

답변

1

당신은 "명령 레지스트리"를 만들어야합니다. 사전처럼 간단 할 수 있습니다. 당신이 메인 프로그램에서

:

commands = {} 

그리고 어떤 서브 모듈의

당신은 당신이 그런 다음 명령을 처리 할 수 ​​argparse 사용할 수 있습니다
from yourmodule.main import commands 

def mynewcommand(arguments=here): 
    pass 

commands['newcommand'] = mynewcommand 

을 추가 할 수 있습니다. 어떤 경우에는 모듈이 명령의 서브 파서 파트도 추가해야합니다.

3

복잡한 구문 분석을 수행 할 필요가없는 경우 baker 모듈을 사용하는 것이 좋습니다. 장식자를 통해 부속 명령과 인수를 정의 할 수 있습니다. 예를 들어 :

#!/usr/bin/env python 
import baker 

@baker.command() 
def foo(a=1): 
    print 'foo:', a 

@baker.command() 
def baz(b=1): 
    print 'baz:', b 

baker.run() 

(옵션)이 ab 매개 변수와 함께 두 개의 하위 명령을 foobaz을 정의합니다. 그래서 당신은 다음과 같이 사용할 수 있습니다 :

$ ./test_baker.py foo --a 2 
foo: 2 
$ ./test_baker.py baz 
baz: 1 

또한 도움을 생성하기 위해 문서화 문자열을 사용합니다.

baker 모듈이 전역이므로 하위 명령은 여러 개의 파일 (.py)을 포함 할 수 있습니다. 가져 오는 동안 부속 명령이 자동으로 등록됩니다.

또한 단지 하나의 .py 파일이므로 소스 트리에 파일을 놓을 수 있습니다.

관련 문제