Многострочная строка справки по аргументам в ArgumentParser в Python 2.7

#python #python-2.7

#python #python-2.7

Вопрос:

У меня есть код, который принимает некоторые аргументы следующим образом:

 parser = argparse.ArgumentParser()
requiredNamed = parser.add_argument_group('required named arguments')
requiredNamed.add_argument('--input_feed', help='''Please provide an input csv file for automatic database creation such as follow: n environment, database_name, location n
 ENV, d_wc_wrk_pic, '/data/dev/wc/storage/work/d_wc_wrk_pic'
 ''',required=True)
args = parser.parse_args()
 

Вывод на стандартный вывод выглядит следующим образом:

стандартный вывод

когда я набираю команду —help, за подсказками не следуют новые строки? может ли кто-нибудь предложить мне способ исправить эту ошибку новой строки?

Ответ №1:

В argparse модуле есть метод в классе HelpFormatter:

 def _split_lines(self, text, width):
    text = self._whitespace_matcher.sub(' ', text).strip()
    # The textwrap module is used only for formatting help.
    # Delay its import for speeding up the common usage of argparse.
    import textwrap
    return textwrap.wrap(text, width)
 

Хотя ваше сообщение справки содержит новые строки, но _split_lines метод заменяет их пробелами, а затем снова разделяет строки с помощью textwrap модуля.

Чтобы избежать прямого изменения кода argparse moudle, вы можете использовать трюк, называемый инъекцией:

 import argparse


def inject_help_formatter():
    def _my_split_lines(self, text, width):
        return text.split('n')

    # Inject
    argparse.HelpFormatter._split_lines = _my_split_lines

# Do inject before `parser.parse_args()`
inject_help_formatter()

parser = argparse.ArgumentParser()
requiredNamed = parser.add_argument_group('required named arguments')
requiredNamed.add_argument('--input_feed', help='''Please provide an input csv file for automatic database creation such as follow: 
environment, database_name, location
 ENV, d_wc_wrk_pic, '/data/dev/wc/storage/work/d_wc_wrk_pic'
 ''', required=True)
args = parser.parse_args()
 

--help выводит:

 optional arguments:
  -h, --help            show this help message and exit

required named arguments:
  --input_feed INPUT_FEED
                        Please provide an input csv file for automatic database creation such as follow: 
                        environment, database_name, location
                         ENV, d_wc_wrk_pic, '/data/dev/wc/storage/work/d_wc_wrk_pic'