как получить имя аргумента argparser? - PullRequest
0 голосов
/ 05 мая 2020

Я пытаюсь разобрать аргументы, переданные из командной строки, всего передаю 15 аргументов. Я пытаюсь сгруппировать их, давая им одно и то же место назначения (), мне нужно их сгруппировать. Теперь, когда я печатаю ввод, я получаю списки, например, [mylo go .png, otherlo go .png] и так далее. Как я могу получить результат, подобный {destination: 'value1', 'value2'}. Я знаю, что могу сделать это вручную, но в моем случае это не решение ..

   parser = argparse.ArgumentParser(prog='Moodle automation', add_help= False,
                                     description=description(), usage='nana nanan nana')
   parser.add_argument('-logo', '--set_logo',
                        help='',
                        dest='branding',
                        type=str,
                        action='append')

    parser.add_argument('-c_logo', '--set_compact_logo',
                        help='',
                        dest='branding',
                        type=str,
                        action='append'
                        )


    web_status.add_argument('-wn', '--web_new',
                            help=" ",
                            dest='web_state',
                            action="append")

    web_status.add_argument('-wo', '--web_old',
                            help="",
                            dest="web_state",
                            action="append")
    args = parser.parse_args()
     branding_details = args.branding
     print(branding_details)

в случае ввода:

program.py -logo mylogo.png -c_logo custom_logo.png

Я получаю вывод ['mylogo.png', 'custom_logo.png']

Ответы [ 2 ]

0 голосов
/ 05 мая 2020

Если вы просто print(vars(args)), он выдаст такой результат. vars() всегда удобная функция, если вы имеете дело с именами объектов.

{'branding': ['mylogo.png', 'custom_logo.png']}

Просто удалите эти квадратные скобки [] из вывода, и если вы используете несколько мест назначения, вы можете перебирать словарь args, чтобы получить желаемый результат.

args_dict = vars(args)
for k, v in args_dict.items():
    print("{", k, ":", str(v).strip('[]'), "}")

вывод:

{ branding : 'mylogo.png', 'custom_logo.png' }

ИЛИ даже лучшее форматирование с

args_dict = vars(args)
for k, v in args_dict.items():
    print('{{{0}: {1}}}'.format(k, str(v).strip('[]')))

вывод:

{branding: 'mylogo.png', 'custom_logo.png'}
0 голосов
/ 05 мая 2020

Вот полный минимальный пример, где мы можем указать несколько logo и compact_logo с nargs='*'. Результат содержит списки аргументов.

cli представляет собой пример строки, которую вы должны передать программе.

import argparse
parser = argparse.ArgumentParser(prog='Moodle automation', add_help= False,
                                 description='', usage='nana nanan nana')
parser.add_argument('-l', '--set_logo',
                    help='',
                    dest='logo',
                    nargs='*',
                    type=str)

parser.add_argument('-c', '--set_compact_logo',
                    help='',
                    dest='compact_logo',
                    nargs='*',
                    type=str)

cli = '-l mylogo.png -c custom_logo_1.png custom_logo_2.png'
args = parser.parse_args(cli.split())
print("List of arguments")
print(args.logo)
print(args.compact_logo)
print("Create a dict of key values for arguments")
dict_key_args = {key: value for key, value in args._get_kwargs()}   
# Create the following data structure
# {'compact_logo': ['custom_logo_1.png', 'custom_logo_2.png'],
# 'logo': ['mylogo.png']}      
...