我在使用argparse时遇到一些问题。我想要一组可以在命令行上定义的名称,这些名称将影响程序的行为。我尝试了以下片段:
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("allon", action='store_true', default = False,
help="Toggles all output pins to ON.")
parser.add_argument("alloff",action='store_true',
help="Toggles all output pins to OFF.")
parser.add_argument("cont", action='store_true',
help="Toggles all output pins continously on and off.")
args = parser.parse_args()
if args.allon:
do_allon()
elif args.alloff:
do_alloff()
....
但代码的行为却出乎意料。我不想在这些选项中使用“--”,因为我想像git status
(没有前导的“--”)来调用我的代码。在
首先,如果我调用没有参数的代码,那么所有参数都设置为True,而如果没有给定参数,我希望将它们设置为False。预期的行为如下:调用as时
^{pr2}$我希望allon, alloff
和{False
,而调用为
python code.py alloff
我希望allon
和{False
,而{True
。在
第二,当我打电话给例如python code.py allon
时,我得到
code.py: error: unrecognized arguments: allon
我完全不明白。我知道如何使用optparse,但是非常感谢argparse的帮助,以使上面的代码片段正常工作。在
谢谢 亚历克斯
另外,if循环只是教育性的,实际上并不是这样实现的。在
选项通常使用前导
-
表示短参数(1个字符),或使用前导--
表示长参数。在因此,您应该给可选参数两个前导破折号:
如果要将函数的第一个参数设为强制参数,并限制可用的选项,请按以下方式执行:
用法示例:
^{pr2}$当您看到命令模式时,如
git status
,git commit
,等等,我们讨论的是sub-commands。为了创建子命令,argparse允许您使用子解析器,这本质上与主解析器一样(使用命令行开关等)。在定义如下:
我已经将一个函数与每个子parser(
set_defaults(func=...)
)相关联,因此args
结构将有一个指向所定义函数之一的func
属性。我们只需要叫它。在
^{pr2}$--help
的输出:相关问题 更多 >
编程相关推荐