2017-10-03 1 views
2

私はPythonの​​を使用しています。引数のヘルプテキストのインデントが少なくてすみます。これは​​が発生しているものです。argparseで引数のインデントレベルを下げる方法は?

$ ./help.py -h 
usage: help.py [-h] [--program-argument PROGRAM_ARGUMENT] 

Description of program 

optional arguments: 
    -h, --help   show this help message and exit 
    --program-argument PROGRAM_ARGUMENT 
         This is some help text about --program-argument. For example: 

          --program-argment "You can supply a string as the program argument" 

私はそれがよりこのような何かを生成したい:

$ ./help.py -h 
usage: help.py [-h] [--program-argument PROGRAM_ARGUMENT] 

Description of program 

optional arguments: 
    -h, --help   show this help message and exit 
    --program-argument PROGRAM_ARGUMENT 
     This is some help text about --program-argument. For example: 

      --program-argment "You can supply a string as the program argument" 

は達成可能ということですか?これは私のコードです:

#! /usr/bin/env python 
import argparse 

HELP_TEXT = """\ 
This is some help text about --program-argument. For example: 

    --program-argment "You can supply a string as the program argument" 
""" 


if __name__ == '__main__': 
    argument_parser = argparse.ArgumentParser(
     formatter_class=argparse.RawTextHelpFormatter, 
     description=('Description of program')) 
    argument_parser.add_argument(
     '--program-argument', 
     help=HELP_TEXT 
    ) 
    args, unknown = argument_parser.parse_known_args() 

答えて

3

​​フォーマッタはいくつかの書式設定を制御するのに役立つことができるいくつかの初期設定値をサポートしています。それらはすべてHelpFormatterから得られます。この__init__メソッドがあります。

class HelpFormatter(object): 
    """Formatter for generating usage messages and argument help strings. 

    Only the name of this class is considered a public API. All the methods 
    provided by the class are considered an implementation detail. 
    """ 

    def __init__(self, 
       prog, 
       indent_increment=2, 
       max_help_position=24, 
       width=None): 
    # stuff 

どのくらいのヘルプサブメッセージをインデントするために決定する際にあなたがあなたのメッセージの少ないインデントを取得するために10または12のようなものにそれを減らすことを試みることができるようmax_help_positionは、使用されています。

#!/usr/bin/env python 
import argparse 

HELP_TEXT = """\ 
This is some help text about --program-argument. For example: 

    --program-argment "You can supply a string as the program argument" 
""" 

less_indent_formatter = lambda prog: argparse.RawTextHelpFormatter(prog, max_help_position=10) 


if __name__ == '__main__': 
    argument_parser = argparse.ArgumentParser(
     formatter_class=less_indent_formatter, 
     description=('Description of program')) 
    argument_parser.add_argument(
     '--program-argument', 
     help=HELP_TEXT 
    ) 
    args, unknown = argument_parser.parse_known_args() 

これは、その結果: `less_indent_formatter`フォーマッタは` lambda`する必要がないのはなぜ

usage: help.py [-h] [--program-argument PROGRAM_ARGUMENT] 

Description of program 

optional arguments: 
    -h, --help 
     show this help message and exit 
    --program-argument PROGRAM_ARGUMENT 
     This is some help text about --program-argument. For example: 

      --program-argment "You can supply a string as the program argument" 
+0

6の値は次のようになります

usage: help.py [-h] [--program-argument PROGRAM_ARGUMENT] Description of program optional arguments: -h, --help show this help message and exit --program-argument PROGRAM_ARGUMENT This is some help text about --program-argument. For example: --program-argment "You can supply a string as the program argument" 

?私たちのリンターはそれに不平を言ったので、私は 'def'に変更しましたが、' metavar tupleの長さはnargsと一致しません。 – Drew

+0

@Drewラムダはちょうど最も便利でした、方法も同様に動作します。 'length of metavar'問題に遭遇しているなら、メソッドの引数が' prog'と呼ばれていることを確認します。なぜなら、 'argparse'がそのメソッドを呼び出すためです。さらなる助けが必要な場合は、私に知らせてください。私が家に帰ってコンピュータにアクセスすると、私は反応します。 – birryree

+0

ああ、私は引数名を 'program'に変更しました。それがkwarg経由で渡されたことを認識していませんでした。 – Drew

関連する問題