Python: 使用 argparse 从函数 (*args) 分配变量
Python: assigning variables from function(*args) using argparse
我正在尝试将我的参数从 argparse 分配给变量。我有两个脚本,一个是解析器,另一个是模块。当我尝试分配一个变量时,我得到一个元组对象没有属性错误。任何指导将不胜感激。
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()
pyrr.py
def parse_cmds(*args):
print(args)
pass
(Namespace(mode='pyrr', plugin_name='ntuser', reg_loc='/user/home', rip_loc='/user/some'),)
当我尝试通过研究方法(例如 arg.plugin_name)分配变量时,我得到 AttributeError: 'tuple' object has no attribute 'pyrr'
所以args
是一个Namespace
对象
Namespace(mode='pyrr', plugin_name='ntuser', reg_loc='/user/home', rip_loc='/user/some')
正如您的第一个脚本所示,您可以使用 args.mode
。
在(更正缩进)
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
模块的名称。
我正在尝试将我的参数从 argparse 分配给变量。我有两个脚本,一个是解析器,另一个是模块。当我尝试分配一个变量时,我得到一个元组对象没有属性错误。任何指导将不胜感激。
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()
pyrr.py
def parse_cmds(*args):
print(args)
pass
(Namespace(mode='pyrr', plugin_name='ntuser', reg_loc='/user/home', rip_loc='/user/some'),)
当我尝试通过研究方法(例如 arg.plugin_name)分配变量时,我得到 AttributeError: 'tuple' object has no attribute 'pyrr'
所以args
是一个Namespace
对象
Namespace(mode='pyrr', plugin_name='ntuser', reg_loc='/user/home', rip_loc='/user/some')
正如您的第一个脚本所示,您可以使用 args.mode
。
在(更正缩进)
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
模块的名称。