2010-08-22 26 views
14

Tôi đang tạo một kịch bản lệnh shell với mô-đun optparse, cho vui, vì vậy tôi muốn in một bản vẽ ascii đẹp ở vị trí của mô tả.Nghệ thuật ASCII trong mô tả phân tách

Hóa ra rằng mã này:

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.''') 

render như thế này:

$ ./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 

Tôi đã thử một sự kết hợp khác nhau của dấu gạch chéo, dòng mới và ESPACES không thành công.

Bạn có thể, bạn bè pytonista, giúp tôi hiển thị Totoro đúng cách không?

Trả lời

11

Các định dạng mặc định, IndentedHelpFormatter, gọi phương pháp này:

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

Nếu bạn phân lớp IndentedHelpFormatter, bạn có thể loại bỏ các self._format_text gọi đó gây ra vấn đề:

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() 
+5

Google dịch nói rằng epilog có nghĩa là: "Gián có thể lập kế hoạch thành công, ném máu nóng hôi thối của hộp bê tông của họ. Bây giờ người đàn ông là một loài lang thang trong không gian, một kẻ lang thang trong các ngôi sao." LOL! – unutbu

+0

Có vẻ như những gì tôi đang tìm kiếm, cảm ơn bạn rất nhiều, thưa bạn. Bản dịch gần như chính xác :) – tutuca

+0

Bạn rất hoan nghênh, tutuca. Epilog của bạn là hấp dẫn! :) – unutbu

0

Nếu vẫn thất bại, sử dụng tạo mã.

Cách đơn giản nhất là tạo ra một tập tin văn bản có chứa đầu ra mong muốn của bạn, và base64 mã hóa nó và nhúng nó trong một file py đó cho thấy nhiều một biến toàn cầu

Bây giờ bạn cần phải bao gồm tạo py, giải mã base64 và in biến toàn cục và tất cả đều hoạt động.

+0

Bạn đang đùa tôi. Đúng? Mặc dù tôi đánh giá cao tinh thần đề xuất của bạn :) – tutuca

+1

Không, tôi không đùa. Có phải là một cách tốt hơn nhưng nếu bạn không thể tìm thấy nó, điều này hoạt động. – Joshua

6

Xin lỗi vì sự chiêu hồn chủ đề, nhưng đối với những người nâng cấp lên 2.7 bạn có thể dễ dàng hiển thị nghệ thuật ASCII trong mô tả của bạn bằng cách đơn giản thông qua

formatter_class=argparse.RawDescriptionHelpFormatter 

để argparse.ArgumentParser()

thấy http://docs.python.org/2/library/argparse.html#formatter-class cho thí dụ!

Các vấn đề liên quan