15

optparseモジュールを使用してシェルスクリプトを作成しているので、説明の代わりに素敵なアスキーアートの絵を印刷したいと思いました。

このコードは次のようになります。

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

スラッシュ、改行、エスパスのさまざまな組み合わせを試しましたが、成功しませんでした。

友達のピトニスタ、トトロを正しく表示するのを手伝ってくれませんか?

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 に答える