在 Python 2.7 中使用 argparse 时,如何将超过 'args' 的值传递到我的默认函数中?

When using argparse in Python 2.7, how can I pass more than 'args' into my default function?

我正在尝试将一些参数传递给我的解析器的默认函数,这些参数不是直接来自命令行中的参数。用户在 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 将成功打印出此处的参数。注意

(func=test_function)

不传入任何参数,好像只传入args,这里加括号是为了防止传入args,因为传入不会自动推送,输入也行不通就 Python 而言,args 尚未定义。

我也试过

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

然而 realValue 似乎是在函数本身的引用处求值,而不是函数 returns(我认为函数甚至没有执行,所以我不确定这是否会将参数传递给 lookup_function).

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

有没有人知道有什么方法可以做我想做的事情?我需要吸收它并导入交叉子模块吗?

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

    Parser.set_defaults(func=test_function)

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

我最终找到了自己的方式,我正在寻找一些非常简单的东西。 出于某种原因,我没有把这两个放在一起。

   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)

对不起,我想这个愚蠢的问题,希望这对以后犯类似错误的人有所帮助

这是您只将 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.")