在Python 2.7中使用argparse时,我怎样才能传递超过' args'进入我的默认功能?

时间:2018-01-24 22:54:24

标签: python python-2.7 argparse

我试图将一些参数传递给我的解析器的默认函数,该函数不是直接来自命令行中的参数。用户在cli上提供的参数意味着用于查找所需的实际值,因为它的实际值不是用户可以重复输入。

使用argparse,您可以执行以下操作:

parser = argparse.ArgumentParser()
def test_function(args):
    print args

Parser.set_defaults(func=test_function)
args = parser.parse_args()
args.func(args)

test_function将在此处成功打印出args。注意如何

(func=test_function)

没有传递任何参数,似乎只是传入args,这里添加括号可以防止传入args,因为如果你这样做就不会自动推送,并在win&#39中输入就Python而言,还没有定义args。

我也试过

Parser.set_defaults(func=test_function, realValue=lookup_function)

然而,realValue似乎在对函数本身的引用进行评估,而不是函数返回的内容(我不认为函数甚至被执行,所以我不确定这是否会通过args进入lookup_function)。

可能可能从test_function调用查找函数,但是我想避免这样,因为在我的程序中这两个函数是在单独的模块中,并且它似乎有点......导入很麻烦它们相互之间而不是简单地将它们都导入到我的main.py文件中。

是否有人知道有什么方法可以做我想做的事情?我是否需要将其吸取并导入交叉子模块?

修改 为了尝试更清楚,我想通过argparse的功能将args 另一个动态值传递给test_function;

    Parser.set_defaults(func=test_function)

通过使用args的值之一找到动态值。我希望知道一种方法来传递给test_function,或args本身,一个由另一个函数返回的新值。

2 个答案:

答案 0 :(得分:1)

我最终找到了自己的方式,我看起来很简单。 出于某种原因,我并没有将这两者结合在一起。

   Parser.set_defaults(func=test_function)
args.func(args)

我认为这是argparse模块中的内置功能,但它比看起来简单得多。我找到了一种方法来实现通过遵​​循正确的语法(谁会想到)

将新值添加到args

所以这个:

parser = argparse.ArgumentParser()
def test_function(args):
    print args

Parser.set_defaults(func=test_function, realValue=lookup_function)
args = parser.parse_args()
args.func(args)

成为这个:

parser = argparse.ArgumentParser()
def test_function(args):
    print args

Parser.set_defaults(realValue=lookup_function)
Parser.set_defaults(func=test_function)
args = parser.parse_args()
args.realValue(args)
args.func(args)

对不起,我想这个愚蠢的问题,希望这有助于将来犯下类似错误的人

答案 1 :(得分:0)

以下是您只将args传递给args.func的部分:

args.func(args)
#         ^^^^ this bit!

如果您想将其他内容传递给args.func,请传递它们!

args.func(whatever, the, heck, you, want)

如果您希望args.func接收3"fish""sweaters"作为参数,您可以这样做:

args.func(3, "fish", "sweaters")
当然,

args.func会立即阻塞这些参数,因为你编写它只是期望命名空间对象作为参数。您可以将其定义为采用不同的参数:

def test_function(number, animal, garments):
    print("I stuffed", number, garments, "into a big rubber", animal, "as an art project.")