Как отображать флаги на терминале (например, [-h])?

Пример снимка экрана: мой желаемый вывод: Image Я хотел включить справочные флаги для пользователей моих скриптов и изначально думал, что решение заключается в использовании argparse:


parser = argparse.ArgumentParser(description='... blah blah ...')
parser.add_argument('file1', help='... blah blah ...')
parser.add_argument('file2', help='... blah blah ...')

По какой-то причине я не могу печатать в приглашении cmd, так как добавление -h (например, красный круг в моем примере) вместо этого возвращает ошибку FileNotFound. Вышеприведенный код неверен?

Если да, то не могли бы вы предоставить мне код? Или есть какие-нибудь полезные источники (я искал окончательный пример, пока безрезультатно)


person Community    schedule 02.01.2020    source источник
comment
Добро пожаловать в StackOverflow. См. минимальный воспроизводимый пример. Мы не сможем эффективно помочь вам, пока вы не опубликуете свой код MRE и точно не укажете проблему. Мы должны иметь возможность вставить ваш опубликованный код в текстовый файл и воспроизвести указанную вами проблему. Кроме того, перед публикацией убедитесь, что вы правильно изучили примеры. Запрашивать источники не по теме для переполнения стека.   -  person Prune    schedule 02.01.2020
comment
Отвечает ли это на ваш вопрос? Отобразить справочное сообщение с python argparse когда скрипт вызывается без аргументов   -  person gold_cy    schedule 02.01.2020
comment
Вот некоторая дополнительная информация об использовании модуля argparse, которая может помочь. См. раздел Справка по настройке.   -  person martineau    schedule 02.01.2020
comment
@Prune Да, я бы опубликовал код MRE лучше, чем 3 строки выше, однако это привело бы к массивному блоку кода, тем более что оказалось (из источника, предоставленного @aws_apprentice) я пропустил одну строку кода: args = parser.parse_args(). Но я понимаю вашу озабоченность.   -  person    schedule 02.01.2020
comment
@aws_apprentice Спасибо, теперь это работает после того, как я добавил args = parser.parse_args() после трех строк кода. Но знаете ли вы, почему это так? Кажется, я мог бы заменить любое имя вместо переменной 'args'; интерпретатор как-то использует это за кадром?   -  person    schedule 02.01.2020


Ответы (2)


Я не могу воспроизвести это.

so59568543.py

import argparse

parser = argparse.ArgumentParser(description='... blah blah ...')
parser.add_argument('file1', help='... blah blah ...')
parser.add_argument('file2', help='... blah blah ...')
args = parser.parse_args()

print(args)

Windows 10, Python 3.7.3

C:\Users\X\Desktop>python so59568543.py
usage: so59568543.py [-h] file1 file2
so59568543.py: error: the following arguments are required: file1, file2

C:\Users\X\Desktop>python so59568543.py -h
usage: so59568543.py [-h] file1 file2

... blah blah ...

positional arguments:
  file1       ... blah blah ...
  file2       ... blah blah ...

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

C:\Users\X\Desktop>python so59568543.py aaa bbb
Namespace(file1='aaa', file2='bbb')

C:\Users\X\Desktop>

person AKX    schedule 02.01.2020
comment
Да, это было слишком долго для воспроизведения, тем более что ошибка заключалась в простом пропуске 'args = parser.parse_args()', как вы указали здесь - спасибо. Вы знаете, что делает эта дополнительная строка кода? Возможно, интерпретатор использует эту переменную без моего ведома? - person ; 02.01.2020
comment
parse_args() выполняет фактический анализ параметров и аргументов командной строки. Без него парсер вообще ничего не делает. - person AKX; 02.01.2020

Попробуйте добавить

parser = argparse.ArgumentParser(add_help=True)

person Kenan    schedule 02.01.2020
comment
add_help истинно по умолчанию. - person AKX; 02.01.2020