代码之家  ›  专栏  ›  技术社区  ›  tutuca

optparse描述中的ASCII艺术

  •  14
  • tutuca  · 技术社区  · 16 年前

    我正在用optparse模块制作一个shell脚本,jut for fun,所以我想打印一个漂亮的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
    

    我尝试过各种斜杠、换行和空格的组合,但都没有成功。

    朋友,你能帮我把托托罗画好吗?

    3 回复  |  直到 16 年前
        1
  •  11
  •   unutbu    16 年前

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

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

    缩进帮助格式化程序 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()
    
        2
  •  7
  •   Stephan Tual    13 年前

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

    formatter_class=argparse.RawDescriptionHelpFormatter
    

    至argparse.ArgumentParser参数分析器()

    看见 http://docs.python.org/2/library/argparse.html#formatter-class 例如!

        3
  •  0
  •   Joshua    16 年前

    如果其他方法都失败了,请使用代码生成。

    最简单的方法是创建一个包含所需输出的文本文件,并对其进行base64编码,然后将其嵌入一个公开全局变量的.py文件中

    现在需要包含生成的.py、base64解码并打印全局变量,所有这些都可以工作。

    推荐文章