我希望我的代码能够根据标志调用不同的函数,然后使用在标志之后传递的参数作为函数的输入。
预期输出示例:
$ python3 test.py -a 2
4
$ python3 test.py -a human123
<Error message>
$ python3 test.py -h human123
Hello, human123
下面是我的示例代码:
class Test:
def __init__(self):
pass
def add(self, a):
return a+a
def hello(self, name):
return f"Hello, {name}"
parser = argparse.ArgumentParser()
parser.add_argument('-a', '--add', dest='command', action='store_consts', const='add', nargs=1, help='add a to itself')
parser.add_argument('-h', '--hello', dest='command', action='store_consts', const='hello', nargs=1, help='hello!')
args = parser.parse_args()
t = Test()
if args.command=='add':
print(t.add(args.add))
elif args.command=='sub':
print(t.hello(args.hello))
这个示例代码目前正在做我想实现的事情。我尝试了很多方法来解决这个问题,从删除“const”,将action改为“store”,将nargs的值改为“?'等,但是,它不断给我不同类型的错误,如TypeError等。
2条答案
按热度按时间l0oc07j21#
简化你的论点:
测试运行:
===
你的错误,你没有显示:{当你得到错误,不要只是扔你的手,并随机尝试替代品。阅读文档并尝试理解错误。
'store_consts'是一个名称错误;对于'store_const',
nargs
固定为0;这是无法改变的如果我添加3个参数-两个store_const和一个位置:
请注意两个新的
command
和foo
属性,您可以在函数调用中使用它们:pw9qyyiw2#
通常我使用
add_argument
的dest
参数来指定变量名。举例来说:
可通过以下方式访问:
我相信每个参数需要一个唯一的
dest
。另外,
-h
保留用于帮助。您可能希望将其更改为-e
或其他内容。