2016-07-11 1 views
0

私はスクリプトでadd_user()関数を呼び出すと、必要なすべての引数を渡す方法を見つけ出すように見えることはできませんでsubparserから返されました。私はこの得ていない名前空間はparse_args()

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

を行う場合には、adduserNamespaceを見つけることができません。私はこの

parser_adduser.set_defaults(func=add_user) 

を追加する場合

AttributeError: 'Namespace' object has no attribute 'adduser' 

しかし、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 

私はばかだ場合、私は知らないが、私はそう使いたいsubparser機能を使用している間adduserを使用してスクリプトを呼び出すと、すべてのフラグを渡す方法を見つけ出すように見えることはできませんひどく。

答えて

0

私はあなたがそれがsubparserを追加することの意味を誤解していると思います。サブパーザを追加すると、コマンドラインでサブパーカが選択されている場合、そのサブパーザの引数が名前空間に追加されます。その後、コマンドラインとの相互作用の標準的な方法は、引数として、引数の名前空間を受け入れる各subparserのエントリポイントを作成することです。例えばあなたはadduserremoveuser subparserを持っているとします。彼らはあなたのような何かをするかもしれません:

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) 
+0

それはそれです。ありがとうございました。ありがとうございました。 **ありがとうございます** –

+0

@JenniferBasalone - 問題ありません。私は役に立つとうれしいです:-)。 – mgilson

関連する問題