python - Argparse 无法识别和错误处理

标签 python argparse

我在使用 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。预期行为如下:调用时

python code.py

我希望 allon, alloffcont 被设置为 False,而调用 as

python code.py alloff

我希望 alloncontFalsealloff 设置为 True.

其次,当我调用python code.py allon 我明白了

code.py: error: unrecognized arguments: allon

我完全不明白。我知道如何使用 optparse,但非常感谢 argparse 的帮助,以使上面的代码片段正常工作。

谢谢 亚历克斯

附言if 循环只是教育性的,实际上并没有那样实现。

最佳答案

当您看到类似git statusgit commit 等命令模式时,我们在谈论sub-commands。 .要创建子命令,argparse 允许您使用子解析器,它们本质上就像主解析器(采用命令行开关等)。

像这样定义它们:

import argparse
parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers(help='sub-command help')

allon_parser = subparsers.add_parser('allon',
    help='Toggles all output pins to ON.')
allon_parser.set_defaults(func=do_allon)

alloff_parser = subparsers.add_parser('alloff',
    help="Toggles all output pins to OFF.")
alloff_parser.set_defaults(func=do_alloff)

cont_parser = subparsers.add_parser('cont',
    help="Toggles all output pins continously on and off.")
cont_parser.set_defaults(func=do_cont)

args = parser.parse_args()
# Call the associated `func` function
args.func()

我已将一个函数与每个子解析器相关联 (set_defaults(func=...)),因此 args 结构将具有一个 func 属性指向定义的函数之一。我们只需调用它即可。

--help 的输出:

usage: PROG [-h] {cont,alloff,allon} ...

positional arguments:
  {cont,alloff,allon}  sub-command help
    allon              Toggles all output pins to ON.
    alloff             Toggles all output pins to OFF.
    cont               Toggles all output pins continously on and off.

optional arguments:
  -h, --help           show this help message and exit

关于python - Argparse 无法识别和错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12507104/

相关文章:

python - 使用 plac 时出现属性错误 : 'Namespace' object has no attribute

python - 检查参数是否存在并相应地设置一个值

python - 如何从字符串中提取 float

Python:Argparse - 必需和可选参数

python - 为什么在 `dir()` 输出中省略了一些功能?

python - 从 "_ElementUnicodeResult object of lxml.etree module"创建列表对象

python - 将命令行参数分成组

python - 在互斥参数组中使用 stdin

python - 为什么这个函数只正确运行一次,然后返回一个空列表?

python - Pypi 中缺少 Urllb2 包