python - 在Python中解析参数

标签 python parsing command-line-interface argparse

我遇到了一个问题,正在寻找解决方案。我不确定是否可以使用 argparse 来做到这一点。

我希望能够指定一个选项

myprog -a 1
myprog -a 2

现在,当我有 a = 1 时,我希望能够指定 bc。但是当a = 2时,我只能指定d

myprog -a 1 -b 3 -c 0
myprog -a 2 -d 3

此外,必须始终指定a

最佳答案

您无法将切换值作为单个 parse_args 调用来执行此操作,但您可以执行以下操作之一:

  1. 使用sub-commands/sub-parsers
  2. 在完全配置解析器并在完整命令行上运行之前进行部分解析,首先仅检查 a,然后根据第一次调用的结果选择其他解析器参数进行解析。诀窍是使用 parse_known_args对于第一次调用,因此它处理 a (它可以识别)并忽略其他所有内容。

例如,对于方法#2,您可以这样做:

parser = argparse.ArgumentParser()
parser.add_argument('-a', required=True, type=int, choices=(1, 2)
args = parser.parse_known_args()

if args.a == 1:
    parser.add_argument('-b', ...)
    parser.add_argument('-c', ...)    
    args = parser.parse_args()
else:
    parser.add_argument('-d', ...)
    args = parser.parse_args()

这种方法的缺点是,因不正确的使用而吐出的使用信息将不完整;您必须手动在基本解析器中包含指定“真实”用法的文本,这并不有趣。子解析器无法根据值切换进行切换,但它们具有统一、连贯的使用显示。

关于python - 在Python中解析参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34689279/

相关文章:

python - 在 Pycharm 中使用 Pweave 工具

java - 使用奇怪的标签编译样式表 XSL <a :tag>

c# - 在 ASP.NET MVC 中解析 JSON 值时出错?

linux - 自动为用户打开一个小 Sprite

用于列出已执行测试的 PHPUnit 配置选项

python - 在管理应用程序中显示模型的文档字符串

python - 在 Python 中查找对称矩阵的 SVD

python - 如何在列表API View 中查询SerializerMethodField?

javascript - 如何在ajax请求成功回调中获取自动parseJSON数据?

Linux CLI 查找和 cp 问题