使用 argparse 调用函数

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)

hpa*_*ulj 5

如果您是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是推断用户想要什么,并发布帮助和错误消息。根据该信息采取行动主要是您代码的其余部分的责任。