我试图将一些参数传递给我的解析器的默认函数,该函数不是直接来自命令行中的参数。用户在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本身,一个由另一个函数返回的新值。
答案 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.")