无法从parse_args()中的子parser获取返回的命名空间

2024-05-01 23:31:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我似乎不知道如何调用脚本中的add_user()函数并将所需的所有参数传递给它。如果我这么做

if args.adduser:
    add_user(username, account, groups)

它找不到adduserNamespace。在

^{pr2}$

但是,如果我加上这个

parser_adduser.set_defaults(func=add_user)

它似乎执行add_user()函数,但不向它传递任何参数。在

def parse_args():
    helptext = 'Script to Add, Delete, Update AWS Users'
    parser = argparse.ArgumentParser(description=helptext,
                            prog='aws-IAM-user.py',
                            usage='%(prog)s [position] [-u] [optional]',
                            conflict_handler='resolve',)

    parser.add_argument('-v', '--version',
                        dest='version')

    subparsers = parser.add_subparsers(title='Main commands',
                            help='MORE INFO: [COMMAND] -help')

    parent_parser = argparse.ArgumentParser(add_help=False)
    parent_parser.add_argument('-u', '--username',
                            dest='username',
                            action='store',
                            help='list a single user or multiple users, '
                                'seperated by space',
                            nargs='+',
                            required=True)
    parent_parser.add_argument('-a', '--account',
                            dest='account',
                            action='store',
                            nargs='+',
                            help='Specify Account(s).'
                            ' Default is to use all available')

    # 'Add User Parsers'

    parser_adduser = subparsers.add_parser('adduser',
                            parents=[parent_parser],
                            help='adduser -u USER -a ACCOUNT -g GROUP.'
                            ' Passwords are auto-gen')
    parser_adduser.add_argument('-g', '--group',
                                dest='groups',
                                nargs='+',
                                help='specify group(s) seperated by space')
    parser_adduser.set_defaults(func=add_user)

    return parser.parse_args()


if __name__ == '__main__':
    args = parse_args()

    config = ConfigParser.RawConfigParser()
    config.read(AWS_CONFIG_FILE)

    username = args.username
    account = args.account

我不知道我是不是太傻了,但我似乎不知道如何使用adduser调用脚本,并在使用我非常想使用的subparser功能时传递所有标志。在


Tags: 脚本addparserparseusernamehelpargsaccount
1条回答
网友
1楼 · 发布于 2024-05-01 23:31:36

我想你误解了增加一个次级罪犯意味着什么。添加子parser时,如果在命令行中选择了subparser,则该子parser的参数将添加到命名空间中。然后,与命令行交互的标准方法是为每个接受args名称空间作为参数的子parser创建一个入口点。e、 假设你想要一个adduser和一个removeuser子parser。他们可能会做一些类似的事情:

def add_user(args):
    """Entry point for add_user."""
    account = args.account
    username = args.username
    ...

def remove_user(args):
    """Entry point for remove_user."""
    remove_user_argument = args.remove_user_argument
    ...

subparsers = parser.add_subparsers()

add_user_parser = subparsers.add_parser('adduser')
add_user_parser.add_argument(...)
add_user_parser.set_defaults(func=add_user)

add_user_parser = subparsers.add_parser('removeuser')
add_user_parser.add_argument(...)
add_user_parser.set_defaults(func=remove_user)

args = parser.parse_args()
args.func(args)

相关问题 更多 >