Python argparser необязательный аргумент, требующий других аргументов - PullRequest
1 голос
/ 09 мая 2020

Я искал inte rnet и не смог найти, можно ли сделать аргумент с помощью пакета python argparser, который является необязательным, но когда он выбран, ему нужны элементы.

Для лучшее понимание Я объясню в коде, чтобы вам было проще понять.

Моя цель - создать базу данных со всеми моими веб-сайтами и приложениями, на которые я зарегистрирован, и хранить там сайт или платформу, почту, пользователя и пароль. И я хотел создать несколько необязательных аргументов, таких как:

Python manageaccounts.py --add steam mail user pass

Это всего лишь пример, но я думаю, что он делает его более понятным. В основном вместо «--add» я хочу иметь как «--delete», так и аргумент «--change». При этом я хочу сказать, что я не знаю, как сделать аргумент необязательным, чтобы при его выборе он требовал другого аргумента, в этом случае я выбираю «--add» и для добавления новой строки в свою базу данных мне нужен « site "a" mail "user" и "pass", и я хочу сделать "--add" необязательным, и когда он выбран, чтобы сделать сайт mail user и pass обязательным

Если кто-то не сделал этого Я не понимаю, что я хочу знать, это знать, как я могу заставить аргумент требовать других аргументов.

1 Ответ

1 голос
/ 09 мая 2020

Похоже, что вы хотите, это подпарсер

Вот пример:

import argparse

parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers(dest='subparser')

add = subparsers.add_parser("add")
add.add_argument('steam')
add.add_argument('mail')
add.add_argument('user')
add.add_argument('password')

delete = subparsers.add_parser("delete")
delete.add_argument('user')

args = parser.parse_args()

if args.subparser == 'add':
    print("Called add with arguments", args.user, args.mail, args.steam, args.password)
elif args.subparser == 'delete':
     print("Called delete with arguments", args.user)
else:
    print("Unknown option")


...