2010-08-22 4 views
14

optparse 모듈을 사용하여 쉘 스크립트를 만들고 있습니다. 재미 있기 때문에, 설명 대신 멋진 ascii 드로잉을 인쇄하고 싶습니다.optparse 설명의 ASCII 아트

이 코드 것으로 밝혀졌습니다 :

parser = optparse.OptionParser(
    prog='./spill.py', 
    description=u''' 
/ \          
    vvvvvvv /|__/|        
     I /O,O |        
     I /_____ |  /|/|     
    J|/^^^ \ | /00 | _//|   
     |^^^^|W| |/^^\ | /oo |   
     \m___m__|_| \m_m_| \mm_|   
''', 
    epilog=''' 
     Las cucarachas lograron con exito su plan, echando a los pestilentes sangre caliente de sus cajas de cemento. 
Ahora el hombre es una especie errante en el espacio, un vagabundo errante en las estrellas.''') 

는 다음과 같이 렌더링 :

$ ./bin/spill.py -h 
Usage: ./spill.py [options] 

/ \          vvvvvvv /|__/| 
I /O,O |         I /_____ |  /|/| 
J|/^^^ \ | /00 | _//|     |^^^^|W| |/^^\ | /oo | 
\m___m__|_| \m_m_| \mm_| 

Options: 
    -h, --help   show this help message and exit 
#.... bla bla bla, etc 

나는 성공없이 슬래시, 줄 바꿈 및 ESPACES의 다양한 조합을 시도했습니다.

친구 pytonista가 토토로를 제대로 표시 할 수 있습니까? 모든 다른 경우에 실패

import optparse 

class PlainHelpFormatter(optparse.IndentedHelpFormatter): 
    def format_description(self, description): 
     if description: 
      return description + "\n" 
     else: 
      return "" 

parser = optparse.OptionParser(
    prog='./spill.py', 
    formatter=PlainHelpFormatter(), 
    description=u''' 
/ \          
    vvvvvvv /|__/|        
     I /O,O |        
     I /_____ |  /|/|     
    J|/^^^ \ | /00 | _//|   
     |^^^^|W| |/^^\ | /oo |   
     \m___m__|_| \m_m_| \mm_|   
''', 
    epilog=''' 
     Las cucarachas lograron con exito su plan, echando a los pestilentes sangre caliente de sus cajas de cemento. 
Ahora el hombre es una especie errante en el espacio, un vagabundo errante en las estrellas.''') 
(opt,args) = parser.parse_args() 

답변

11

기본 포맷, IndentedHelpFormatter는,이 메소드를 호출 코드 생성을 사용하십시오. ,

가장 간단한 방법은 원하는 출력을 포함하는 텍스트 파일을 생성하는 것, 그리고 64 기수를 인코딩하고

는 이제 평 생성 포함 할 필요가 전역 변수를 노출하는 평 파일을 포함 base64 디코드 및 전역 변수 인쇄 및 모든 작동합니다.

+5

Google 번역에 따르면 에필로그는 "바퀴벌레가 콘크리트 상자의 냄새 나는 뜨거운 피를 던지면서 성공적으로 계획을 세울 수있었습니다. 이제 사람은 우주에서 방황하는 종이며 별에 방랑하는 종입니다."라고 말했습니다. 웃음! – unutbu

+0

내가 찾고있는 것 같아서 고맙습니다. 번역은 거의 정확합니다 :) – tutuca

+0

당신은 매우 환영합니다, tutuca. 에필로그가 흥미 롭습니다! :) – unutbu

0

: 당신이 IndentedHelpFormatter를 서브 클래스 경우

def format_description(self, description): 
    if description: 
     return self._format_text(description) + "\n" 
    else: 
     return "" 

, 당신은 문제의 원인이되는 self._format_text 호출을 제거 할 수 있습니다

+0

농담하는 겁니다. 권리? 제안의 정신에 감사드립니다. – tutuca

+1

아니요, 농담이 아닙니다. 더 나은 방법이 있어야합니다. 그러나 그것을 찾을 수 없다면, 이것은 효과적입니다. – Joshua

6

스레드 강령술에 대한,하지만

http://docs.python.org/2/library/argparse.html#formatter-class를 참조 이제 쉽게 단순히 argparse.ArgumentParser()에

formatter_class=argparse.RawDescriptionHelpFormatter 

를 통과하여 설명에 아스키 아트를 표시 할 수 있습니다 2.7로 업그레이드 사람들 죄송합니다 예!

관련 문제