使用 argparse 选项调用函数并向其传递 sys.argv 元素
call a function with argeparse option and pass it a sys.argv element
我有两个功能
p={}
def a(arg2):
#do something
def b(arg2):
#do something with arg 2
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='*******')
parser.add_argument('-a',dest=a(p),action='store')
parser.add_argument('-s',dest=b(sys.argv[3]), action='store')
args = parser.parse_args
但是当我 运行 script.py -s JohnDoe
它没有 运行 参数 JohnDoe 的函数 b 有什么问题?
args = parser.parse_args
缺少运行该方法的 ()
。否则,您最终会将绑定方法分配给 args
。它不解析任何东西。
dest
参数应该是一个字符串。它是 args 中属性的名称。没有 dest
,script.py -s JohnDoe
应该产生
In [858]: setattr(args, 's', 'JohnDoe') # done during parsing
In [859]: args # display the args variable
Out[859]: Namespace(s='JohnDoe')
In [860]: args.s
Out[860]: 'JohnDoe'
您可以在
中使用
b(arg.s)
action
参数决定了如何处理新解析的值。正如我所演示的,默认是将它存储在 args
中。使用自定义 Action
class 可以做更高级的东西,但这是一个高级主题。
dest=b(sys.argv[3])
将 dest
设置为任何值 b
returns,可能是 None
。如果 b
被定义为
def b(arg):
return arg
然后 b(sys.argv[3])
会产生 JohnDoe
,你会得到一个 args
看起来像:
In [863]: args
Out[863]: Namespace(JohnDoe='JohnDoe')
这是一个可爱的把戏,但可能不是您想要的。
我有两个功能
p={}
def a(arg2):
#do something
def b(arg2):
#do something with arg 2
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='*******')
parser.add_argument('-a',dest=a(p),action='store')
parser.add_argument('-s',dest=b(sys.argv[3]), action='store')
args = parser.parse_args
但是当我 运行 script.py -s JohnDoe 它没有 运行 参数 JohnDoe 的函数 b 有什么问题?
args = parser.parse_args
缺少运行该方法的 ()
。否则,您最终会将绑定方法分配给 args
。它不解析任何东西。
dest
参数应该是一个字符串。它是 args 中属性的名称。没有 dest
,script.py -s JohnDoe
应该产生
In [858]: setattr(args, 's', 'JohnDoe') # done during parsing
In [859]: args # display the args variable
Out[859]: Namespace(s='JohnDoe')
In [860]: args.s
Out[860]: 'JohnDoe'
您可以在
中使用b(arg.s)
action
参数决定了如何处理新解析的值。正如我所演示的,默认是将它存储在 args
中。使用自定义 Action
class 可以做更高级的东西,但这是一个高级主题。
dest=b(sys.argv[3])
将 dest
设置为任何值 b
returns,可能是 None
。如果 b
被定义为
def b(arg):
return arg
然后 b(sys.argv[3])
会产生 JohnDoe
,你会得到一个 args
看起来像:
In [863]: args
Out[863]: Namespace(JohnDoe='JohnDoe')
这是一个可爱的把戏,但可能不是您想要的。