我在类型-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"
python script.py -a
答案 0 :(得分:2)
如果您是Visible
和EnabledChanged
的初学者,我建议您坚持使用存储字符串的默认argparse
操作和布尔操作('store_true / false') )。确保你先了解这些。
也就是说,这是一种使用python
调用不同函数的方法:
store
定义2个函数:
store_const
我定义了默认值和const - 并指定了函数,而不是它们的名称。了解差异很重要。
尝试默认情况:
In [131]: import argparse
尝试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);
命令行案例:
In [136]: args=parser.parse_args([])
In [137]: print(args)
Namespace(a=<function act1 at 0xb07331dc>)
In [138]: args.a()
act1
如果你有更多的参数(dest),你可以将-a
传递给你的函数,如果它被定义为接受它们,In [139]: args=parser.parse_args(['-a'])
In [140]: print(args)
Namespace(a=<function act2 at 0xb078c1dc>)
In [141]: args.a()
act2
。
更简单的布尔参数方法:
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']`.
的主要目的是推断用户想要的内容,并发布帮助和错误消息。对这些信息采取行动主要是其余代码的责任。
答案 1 :(得分:0)
您在add_argument中缺少dest
选项,以便能够引用该选项。
然后,您需要测试-a
选项是否作为参数传递。如果是,则调用该函数。
parser = argparse.ArgumentParser()
parser.add_argument('-a' ,dest="my_flag", action='store_const' ,const=True)
results = parser.parse_args()
def addPXT():
print "hello"
if results.my_flag:
addPXT()
答案 2 :(得分:0)
argparse
将在解析期间调用action
对象,但您需要提供类似Action
类的内容,因为解析器稍后将使用该对象。 Action doc说
您还可以通过传递Action子类来指定任意操作 或实现相同接口的其他对象。推荐 这样做的方法是扩展Action,覆盖调用方法和 可选择 init 方法。
因此,创建一个Action
子类并让它调用你的函数
import argparse
import sys
def addPXT():
print "hello"
class FooAction(argparse.Action):
def __call__(self, parser, namespace, values, option_string=None):
addPXT()
parser = argparse.ArgumentParser()
parser.add_argument('-a', action=FooAction)
results = parser.parse_args(sys.argv[1:])