She*_*rry 0 python python-2.7 argparse
我试图在输入 -a 时通过 argparse 调用函数 addPXT。它不这样做。阅读另一个问题,addPXT 不在冒号中,尝试说 addPXT 不可调用。
parser = argparse.ArgumentParser()
parser.add_argument('-a' ,action='store_const' ,const='addPXT')
results = parser.parse_args()
def addPXT():
print "hello"
Run Code Online (Sandbox Code Playgroud)
python script.py -a
Run Code Online (Sandbox Code Playgroud)
如果您是argparseand的初学者python,我建议您坚持使用store存储字符串的默认操作和布尔操作 ('store_true/false')。确保你先了解这些。
也就是说,这是一种store_const用于调用不同函数的方法:
In [131]: import argparse
Run Code Online (Sandbox Code Playgroud)
定义 2 个函数:
In [132]: def act1():
...: print('act1')
...:
In [133]: def act2():
...: print('act2')
...:
In [134]: parser=argparse.ArgumentParser()
In [135]: parser.add_argument('-a',action='store_const',default=act1,const=act2);
Run Code Online (Sandbox Code Playgroud)
我定义了默认值和常量 - 并指定了函数,而不是它们的名称。了解差异很重要。
尝试默认情况:
In [136]: args=parser.parse_args([])
In [137]: print(args)
Namespace(a=<function act1 at 0xb07331dc>)
In [138]: args.a()
act1
Run Code Online (Sandbox Code Playgroud)
尝试-a命令行案例:
In [139]: args=parser.parse_args(['-a'])
In [140]: print(args)
Namespace(a=<function act2 at 0xb078c1dc>)
In [141]: args.a()
act2
Run Code Online (Sandbox Code Playgroud)
如果你有更多的参数 (dest),你可以传递args给你的函数,如果它被定义为接受它们,args.a(args).
更简单的布尔参数方法:
In [146]: parser=argparse.ArgumentParser()
In [147]: parser.add_argument('-a',action='store_true');
In [148]: args=parser.parse_args([])
In [149]: print(args)
Namespace(a=False)
In [150]: if args.a:
...: act2()
...: else:
...: act1()
act1
# similarly for `['-a']`.
Run Code Online (Sandbox Code Playgroud)
或者如果你接受字符串,甚至可能是选择
if args.a == 'act1':
act1()
elif ...
Run Code Online (Sandbox Code Playgroud)
的主要目的argparse是推断用户想要什么,并发布帮助和错误消息。根据该信息采取行动主要是您代码的其余部分的责任。