15

我正在用 optparse 模块制作一个 shell 脚本,只是为了好玩,所以我想打印一个漂亮的 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

我尝试了斜杠、换行符和空格的不同组合,但没有成功。

pytonista 的朋友,你能帮我正确地展示龙猫吗?

4

3 回答 3

11

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

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

如果您子类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()
于 2010-08-22T21:24:20.593 回答
8

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

formatter_class=argparse.RawDescriptionHelpFormatter

到 argparse.ArgumentParser()

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

于 2013-03-30T18:20:42.477 回答
0

如果一切都失败了,请使用代码生成。

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

现在您需要包含生成的 .py、base64 解码并打印全局变量,一切正常。

于 2010-08-22T21:29:56.767 回答