首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解析bit逐个解析输入

解析bit逐个解析输入
EN

Stack Overflow用户
提问于 2016-06-15 00:36:29
回答 1查看 911关注 0票数 3

我使用阿格帕斯解析我的Python函数的shell输入。

棘手的部分是,这个脚本首先读取一个文件,该文件部分地确定哪种参数可以用于Argparse (它是一个JSON文件,包含用户可以指定输出哪些数据的条件)。

但是在将这些参数添加到我的解析器之前,我想阅读一些与文件读取本身有关的参数。(例如,是否修复输入文件的格式)。就像这样:

代码语言:javascript
复制
test.py (fix_formatting=True, **more arguments added later)

当我尝试两次运行args = parser.parse_args()时,在初始输入之后和添加了更多的键之后,事情就会分崩离析: Argparse相当不出所料地抱怨说,一些用户输入是unrecognized arguments:。我想我可以用子解析器来达到这个目的。

因此,我尝试了(尽可能地遵循文档中的示例)的变体:

代码语言:javascript
复制
def main():
    parser = argparse.ArgumentParser()
    subparsers = parser.add_subparsers(help='sub-command help')
    settingsparser = subparsers.add_parser('settings') #i want a subparser called 'settings'
    settingsparser.add_argument('--fix_formatting', action='store_true') #this subparser shall have a --fix_formatting

然后,我尝试只解析“设置”部分,如下所示:

代码语言:javascript
复制
    settings=parser.parse_args(['settings'])

这似乎很管用。但我再加上我的其他钥匙,东西就坏了:

代码语言:javascript
复制
    keys=['alpha','beta','gamma','delta']
    for key in keys:
        parser.add_argument("--"+key, type=str, help="X")
    args = parser.parse_args()

如果我解析来自键的任何参数的任何输入,Argparse就会抱怨我创建了一个invalid choice: [...] (choose from 'settings')。现在我不明白为什么我必须从“设置”中选择;文档说解析

将只包含命令行选择的主分析器和子解析器的属性(而不是任何其他子解析器)。

  • 我在这里的理解错误是什么?
  • 如果这是一种错误的方法,我们将如何先解析一个输入,然后再解析另一个输入呢?

任何帮助都是非常感谢的!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-15 02:08:04

parse_args打电话给parse_known_args。这将返回args名称解析以及它无法处理的字符串列表(来自sys.argv) (extras)。如果此列表不是空的,则parse_args将引发此错误。

https://docs.python.org/3/library/argparse.html#partial-parsing

因此,如果要解析某些输入,parse_known_args是有用的。

sys.argv保持不变。对解析器的后续调用(无论是否原始调用)再次使用该调用,除非您传递extras

我觉得子解析器帮不了你。它们不适用于延迟或两个阶段的解析。我建议先使用子解析器的文档示例。

对于主解析器来说,子解析器如下所示

代码语言:javascript
复制
subparsers = parser.add_argument('cmd', choices=['select',...])

换句话说,它添加了一个位置参数,其中choices是您定义的子解析器名称。这可能会帮助您了解为什么它希望您命名select。通常需要位置词。

(在最近的版本中,有一个例外,https://stackoverflow.com/a/22994500/901925)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37824316

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档