【发布时间】:2017-08-20 00:40:54
【问题描述】:
我有一个像这样工作的程序:
prog.py filename -r
使用我给的默认默认值
prog.py filename -r 0 500 20
使用0, 500 and 20
我已经设法实现了这一点:
class RdistAction(argparse.Action):
def __call__(self,parser,namespace,values,option_string=None):
if not values:
setattr(namespace,self.dest,[0, 1000, 50])
else:
setattr(namespace,self.dest,values)
parser = argparse.ArgumentParser()
parser.add_argument("-r", "--rdist", action=RdistAction, nargs='*', type=int)
args = parser.parse_args()
但我想固执一点,因为我最初的目标是将 nargs 设置为 3。但是当我在上面的代码中使用 nargs=3 时,我收到一条错误消息,指出需要 3 个参数。
我用谷歌搜索了一下,结果我的直觉告诉我,我必须添加def __init__ 并修改该函数中的某些内容。是否有可能在nargs='*' 时得到与上面代码相同的结果,但使用nargs=3 时得到的结果?
【问题讨论】:
-
如果您根本不提供
-r会发生什么? -
@hpaulj 我的程序是这样工作的,你输入一个文件名,然后输入你想要运行的函数的标志。当它只有 -r 时,rdist 函数使用标准值运行。当您输入带有值的 -r 时,rdist 函数将使用这些值运行。我虽然可以将此作为一个新问题发布,因为现在我的问题更多关于自定义操作和 nargs 错误。