optparse 描述中的 ASCII 艺术

发布于 2024-09-15 16:25:53 字数 1245 浏览 6 评论 0原文

我正在使用 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朋友,你能帮我正确显示龙猫吗?

I'm making a shell script with the optparse module, jut for fun, so I wanted to print a nice ascii drawing in place of the description.

Turns out that this code:

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

renders like this:

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

I've tried a varying combination of slashes, newlines and espaces without success.

Can you, friend pytonista, help me display Totoro properly?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

缺⑴份安定 2024-09-22 16:25:53

默认格式化程序 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()

The default formatter, IndentedHelpFormatter, calls this method:

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

If you subclass IndentedHelpFormatter, you can remove the self._format_text call which is causing the problem:

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()
终止放荡 2024-09-22 16:25:53

对于线程死灵抱歉,但是对于那些升级到 2.7 的人,您现在可以通过简单地传递

formatter_class=argparse.RawDescriptionHelpFormatter

到 argparse.ArgumentParser()

来轻松地在描述中显示 ascII 艺术,请参阅 http://docs.python.org/2/library/argparse.html#formatter-class!

Sorry for the thread necromancy, but for those who upgraded to 2.7 you can now easily display ascII art in your description by simply passing

formatter_class=argparse.RawDescriptionHelpFormatter

to argparse.ArgumentParser()

see http://docs.python.org/2/library/argparse.html#formatter-class for example!

ぃ双果 2024-09-22 16:25:53

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

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

现在您需要包含生成的 .py、base64 解码并打印全局变量这一切都有效。

If all else fails, use code generation.

The simplest way would be to create a text file containing your desired output, and base64 encode it and embed it in a .py file that exposes a global variable

Now you need to include the generated .py, base64 decode, and print the global variable and it all works.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文