optparse描述中的ASCII艺术

tut*_*uca 14 python optparse ascii-art

我正在使用optparse模块创建一个shell脚本,jut是为了好玩,所以我想打印一个漂亮的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.''')
Run Code Online (Sandbox Code Playgroud)

渲染如下:

$ ./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
Run Code Online (Sandbox Code Playgroud)

我尝试过不同的斜杠,换行符和espace组合,但没有成功.

朋友pytonista,你能帮我正确展示Totoro吗?

unu*_*tbu 11

默认格式化程序,IndentedHelpFormatter调用此方法:

 def format_description(self, description):
    if description:
        return self._format_text(description) + "\n"
    else:
        return ""
Run Code Online (Sandbox Code Playgroud)

如果是子类IndentedHelpFormatter,则可以删除self._format_text导致问题的调用:

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()
Run Code Online (Sandbox Code Playgroud)

  • 谷歌翻译说,这个结语意味着:"蟑螂能够成功地计划,抛出他们混凝土盒子里发臭的热血.现在这个男人是一种在太空中游荡的人,一个星星中的流浪者." 大声笑! (5认同)

Ste*_*ual 7

很抱歉线程死灵,但对于那些升级到2.7的人,你现在可以通过简单的传递轻松地在你的描述中显示ascII艺术

formatter_class=argparse.RawDescriptionHelpFormatter
Run Code Online (Sandbox Code Playgroud)

到argparse.ArgumentParser()

例如,请参阅http://docs.python.org/2/library/argparse.html#formatter-class!