使用argparse调用函数

时间:2016-11-03 18:09:24

标签: 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"
    python script.py -a

3 个答案:

答案 0 :(得分:2)

如果您是VisibleEnabledChanged的初学者,我建议您坚持使用存储字符串的默认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:])