【问题标题】:how to get argparser arguments name?如何获取 argparser 参数名称?
【发布时间】:2020-08-19 12:57:30
【问题描述】:

我正在尝试解析从命令行传递的参数。我总共传递了 15 个参数。我正在尝试通过给它们相同的目的地()来对它们进行分组,我需要对它们进行分组。现在,当我打印输入时,我得到列表 f.e [mylogo.png, otherlogo.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']

【问题讨论】:

  • stackoverflow.com/questions/30487767/…?然后检查args.arg1 is not None and args.arg2 is not None
  • 通过该设置,您将获得两个:args.brandingargs.web_state。使用append,您应该得到列表(如果不是默认的None)。
  • 我认为你错过了有问题的重要部分。您究竟使用哪些语句来解析和打印通过命令行提供的参数?
  • web_status 是什么?您的代码位留下了太多歧义。
  • @TejasSarade 我编辑了我的问题。复制粘贴问题..

标签: python argparse


【解决方案1】:

这是一个完整的最小示例,我们可以在其中给出多个logocompact_logonargs='*'。结果包含参数列表。

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']}      

【讨论】:

    【解决方案2】:

    如果你只是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'}
    

    【讨论】:

      猜你喜欢
      • 2018-01-29
      • 2010-09-18
      • 1970-01-01
      • 1970-01-01
      • 2014-07-16
      • 2018-11-25
      • 2010-09-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多