python-逐位解析argparse输入
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python-逐位解析argparse输入,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2279字,纯文字阅读大概需要4分钟。
内容图文
我正在使用Argparse将shell输入解析为我的Python函数.
棘手的部分是,此脚本首先读取一个文件,该文件部分确定Argparse可用的参数类型(这是一个JSON文件,其中包含用户可以指定要输出哪些数据的条件).
但是在将这些参数添加到解析器之前,我想阅读一些与文件读取本身有关的参数. (例如,是否要修复输入文件的格式).有点像这样:
test.py (fix_formatting=True, **more arguments added later)
当我尝试两次运行args = parser.parse_args()时,在初始输入之后并添加了更多键之后,事情就分崩离析了:Argparse可以预料地抱怨某些用户输入是无法识别的参数:.我认为我可能会为此目的使用subparsers.
因此,我尝试了以下形式的变化(尽我所能,紧跟着docs中的示例):
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
然后,我尝试仅解析“设置”部分,如下所示:
settings=parser.parse_args(['settings'])
这似乎有效.但是后来我添加了其他键,事情就中断了:
keys=['alpha','beta','gamma','delta']
for key in keys:
parser.add_argument("--"+key, type=str, help="X")
args = parser.parse_args()
如果我为键中的任何参数解析任何输入,则Argparse会抱怨我做出了无效的选择:[…](从“设置”中选择).现在我不明白为什么我必须从“设置”中进行选择;文档说解析
will only contain attributes for the main parser and the subparser that was selected by the command line (and not any other subparsers)
>我在这里理解的错误是什么?
>如果这是错误的方法,那么如何将输入的一位解析为另一位呢?
任何帮助深表感谢!
解决方法:
parse_args调用parse_known_args.这将返回args名称解析以及无法处理的字符串列表(来自sys.argv)(扩展名).如果此列表不为空,则parse_args会引发此错误.
https://docs.python.org/3/library/argparse.html#partial-parsing
因此,如果要解析某些输入,则parse_known_args很有用.
sys.argv保持不变.后续对解析器的调用(无论是否为原始调用)将再次使用该解析器,除非您传递了其他功能.
我认为次级赞助商不会在这里为您提供帮助.它们不是为了延迟或两阶段解析.我建议先使用子样本的文档示例.
对于主解析器,子解析器看起来像
subparsers = parser.add_argument('cmd', choices=['select',...])
换句话说,它添加一个位置参数,其中选择是您定义的子解析器名称.这可以帮助您了解为什么期望您命名select.通常需要定位.
(在最新版本https://stackoverflow.com/a/22994500/901925中有此例外)
内容总结
以上是互联网集市为您收集整理的python-逐位解析argparse输入全部内容,希望文章能够帮你解决python-逐位解析argparse输入所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。