python получает проанализированные аргументы из CLI?

#python #command-line-arguments

Вопрос:

Учитывая анализатор аргументов с n аргументами, где я передаю через CLI только подмножество, существует ли чистый способ извлечения dict/пространства имен всех переданных k,v аргументов (даже если они идентичны аргументам по умолчанию)?

 parser = argparse.ArgumentParser()
parser.add_argument("--a",type=str,default='a')
parser.add_argument("--b",type=str,default='b')
parser.add_argument("--c",type=str,default='c')
parser.add_argument("--d",type=str,default='d')
 

И

 python run.py --a "e" --b "b"
 

Я хотел бы иметь

 def main():
    parser = argparse.ArgumentParser()
    parser.add_argument("--a",type=str,default='a')
    parser.add_argument("--b",type=str,default='b')
    parser.add_argument("--c",type=str,default='c')
    parser.add_argument("--d",type=str,default='d')

    from_cli = parse_from_cli(parser) # from_cli = {'a':'e','b':'b'}
 

Комментарии:

1. является ли «ns = parser.parse_args()» тем, что вы ищете? Таким образом, вы можете получить доступ к своим аргументам через «ns.a» или «ns[‘q’]».

2. Но таким образом, у меня не будет возможности различать ns.c (по умолчанию не определено пользователем) и ns.a, ns.b, определенные пользователем.

3. Для начала: я был неправ, и вы можете получить к ним доступ только через ns.a. Во-вторых: концептуально не должно иметь значения, используется ли он по умолчанию или нет, вы можете просто использовать значение, которое у вас есть. Если вы действительно хотите знать, дали ли они значение, вы можете проверить, является ли ns.a == ‘a’, но нет способа отличить значение по умолчанию или пользователя, указывающего значение —a=a сам.

4. Сохнет, я, возможно, не смогу объяснить себя, но, пожалуйста, не говорите мне, что мой вариант использования бесполезен:) Учитывая другое загружаемое пространство имен, я хочу объединить эти два параметра, взяв загруженное пространство имен только с аргументами, которые я явно определил из командной строки, отбросив все остальные.