如何选择参数+参数选择并在语句中同时使用这两个选项

时间:2019-01-29 21:08:41

标签: python argparse

使用此参数:

def get_args(arglist):
    parser = argparse.ArgumentParser(
        formatter_class=argparse.RawDescriptionHelpFormatter,
        description=textwrap.dedent('''
           text '''))
    parser.add_argument('--add',
                    default='',
                    nargs='?',
                    choices=['user', 'database'],
                    help='Add user or database (default: %(default)s)')

    args = parser.parse_args(arglist) # Passing argument list into parse
    args_dict = vars(args)  # Dictionary for args
    return args, args_dict  # Return the parsed arguments

我需要执行逻辑以读取做出了choice的内容,并根据该选择沿着if语句的路径前进。

基本上,这就是我想要做的:

if args.add+args.user:
    print(f"do something to add user {args.add}")
if args.add+args.database:
    print(f"do something to add database {args.add}")

我希望此CLI脚本知道用户要添加的内容(目前为userdatabase)。

最终目标是用户将输入./myscript.py --add user USERNAME来添加用户。

2 个答案:

答案 0 :(得分:1)

只需比较存储在参数中的值以检查用户输入的内容:

df1
    ID   val
0   a    0.33
1   b    0.5

对于if args.add == 'user': print(f"do something to add user {args.add}") if args.add == 'database': print(f"do something to add database {args.add}") USERNAME部分

我现在想到的一个解决方案是再增加一个论点。它也可以是定位的或可选的。

位置:

MYDB

脚本调用:parser.add_argument('name', default='', help='USERNAME or DATABASE name to be added (default: %(default)s)') ./myscript.py USERNAME --add user

可选:

./myscript.py MYDB --add database

脚本调用:parser.add_argument('--name', default='', help='USERNAME or DATABASE name to be added (default: %(default)s)') ./myscript.py --add user --name USERNAME

答案 1 :(得分:0)

除了Hemerson的答案,您还可以创建一个subparser,其中的mutually exclusive group包含参数--database--user

这里是一个例子:

import argparse


if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    subparsers = parser.add_subparsers(dest='command')
    add_command = subparsers.add_parser('add', help='Add database or user.')
    add_group = add_command.add_mutually_exclusive_group(required=True)
    add_group.add_argument('--database')
    add_group.add_argument('--user')
    args = parser.parse_args()
    if args.command == 'add':
        if args.user:
            print('Adding user:', args.user)
        if args.database:
            print('Adding database:', args.database)

现在您可以致电:

  • ./myscript.py add --database MYDB
  • ./myscript.py add --user MYUSER

但不是:

  • ./myscript.py add
  • ./myscript.py add --database MYDB --user MYUSER