Python:使用argparse从函数(* args)中分配变量

时间:2016-03-01 21:54:26

标签: python-2.7 argparse

我正在尝试将我的参数从argparse分配给变量。我有两个脚本,一个是解析器,另一个是模块。当我尝试分配变量时,我得到一个元组对象没有属性错误。任何指导都将不胜感激。

Installing nokogiri 1.6.7.2 with native extensions

pyrr.py

def main():
parser = argparse.ArgumentParser(description='A simple front end script interface')
subparsers = parser.add_subparsers(help='(run various listed scripts..)', dest='mode')

add_pyrr_command_options(subparsers)
args = parser.parse_args()

if args.mode == "pyrr":
    pyrr.parse_cmds(args)
else:
    parser.print_usage()

当我尝试通过研究方法(例如arg.plugin_name)分配变量时,我得到def parse_cmds(*args): print(args) pass (Namespace(mode='pyrr', plugin_name='ntuser', reg_loc='/user/home', rip_loc='/user/some'),)

1 个答案:

答案 0 :(得分:1)

因此argsNamespace对象

Namespace(mode='pyrr', plugin_name='ntuser', reg_loc='/user/home', rip_loc='/user/some')

正如您的第一个脚本显示您可以使用args.mode

In(带有更正的缩进)

def parse_cmds(*args):
    print(args)
    pass

args是一个元组(因为*args),例如(Namespace(...),)。使用普通args,您可以继续使用以下网址访问mode

def parse_cmds(args):
   args.mode

另一种选择是通过**kwargs

传递字典
def parse_cmds(**vargs):
   # vargs is a keyword dictionary

parse_cmds(vars(args))  # converting namespace to dictionary

我认为你走在正确的轨道上。您只需要区分namespace对象,词典和元组。

在你的例子' pyrr'是args.mode的字符串值,也是导入的pyrr.py模块的名称。