Я очень новичок в этом модуле, поэтому, пожалуйста, несите меня. У меня есть следующий код:Создайте парсер с подкомандами в argparse, настройте позиционные аргументы
reader.py
import argparse
parent_parser = argparse.ArgumentParser(description="Read text files.")
parent_parser.add_argument('filename', help='TXT file', type=file, nargs='+')
parent_parser.add_argument('--verbose', '-v', action='store_true',
help="Verbosity on")
child_parser = parent_parser.add_subparsers(title="subcommand",
help="Subcommand help")
new_file_command = child_parser.add_parser('new', help="New text file")
edit_file_command = child_parser.add_parser('edit', help="Edit existing text file")
args = parent_parser.parse_args()
То, что я пытаюсь достичь не может быть стандартным способом, как парсеры и UNIX утилиты командной строки работают. Если это правда, пожалуйста, исправьте меня, поскольку я хотел бы иметь стандартизованное приложение.
Это то, что я пытаюсь достичь:
- если вы запустите скрипт с голой позиционной аргумент (ы), как это:
python reader.py some.txt
Я хотел бы иметь возможность просто разобрать его и передать его функция, которая читает текстовый файл, конечно, я хочу принять необязательный аргумент argverbose
, а также - , если вы запустите подкоманду 'new' (
new_file_command
), я не хочу иметь позиционный аргументfilename
, но я хочу пройти строку и создать новый текстовый файл следующим образом:python reader.py new another.txt
- , если вы запустите субкоманду «редактировать» (
edit_file_command
) Я хочу, чтобы передать существующий файл в пути и проверить для него (как вы используетеtype=int
вadd_argument
), а затем, возможно, передать его функции, которая открывает редактор, что-то вроде этого:python reader.py edit some.txt
Опять же, я не уверен, что именно так должны работать приложения/сценарии командной строки. Я прочитал документы и посмотрел примеры, но мне все еще не ясно, как работают парсеры. Я попробовал посмотреть модуль Click, но мне кажется еще сложнее.
Любая помощь приветствуется. Благодаря!
Привет, спасибо за помощь. У меня есть последний вопрос. Мне все еще интересно, как настраивать позиционные аргументы. Предположим, у меня есть следующий код: parser = argparse.ArgumentParser() parser.add_argument ('- v', '--verbose') parser.add_argument ('cmd', nargs = '?', Default = 'open ', choice = [' open ',' edit ',' new ']) parser.add_argument (' filename ', nargs =' + ') Что делать, если я хочу настроить позиционный arg для команды 'new'? Мне не нужно/нужно передавать явное имя файла, а просто строку типа 'some', а затем она создает файл' some.txt'. Как мне это сделать? Спасибо – user3056783
Вы можете создать пользовательский 'type' или' Action'. Но, как правило, проще сделать такое изменение после разбора. Особенно, если вы не выполняете проверку ошибок на «некоторые». – hpaulj
Привет, я все еще просматриваю документы и пытаюсь понять это, но я не могу найти больше примеров в Интернете. Можете ли вы просто показать мне фрагмент, как вы могли бы реализовать это после разбора? Потому что, если я делаю «reader.py new customstring», он проверяет наличие существующего имени файла, чтобы он не позволял мне ничего делать. – user3056783