首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Argparse位置参数'*‘

Argparse位置参数'*‘
EN

Stack Overflow用户
提问于 2018-12-22 22:37:55
回答 1查看 65关注 0票数 0

我需要像下面这样解析命令行

代码语言:javascript
复制
script.py apple banana -l list pineapple

水果应该转到一个列表,而-n标志应该转到另一个标志

我正在试着解决这个问题

代码语言:javascript
复制
parser = argparse.ArgumentParser()
parser.add_argument('fruit', nargs = '*')
parser.add_argument('-l', dest = ls)

在这个例子中,我得到了以下错误:

注意,使用

代码语言:javascript
复制
script.py apple banana -l list

工作正常

使用nargs = argparse.REMAINDER let来实现一种奇怪的行为。

所有的参数都被放在“水果”列表中。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-23 01:05:28

Python3.7添加了一个parse_intermixed_args方法

代码语言:javascript
复制
In [70]: parser = argparse37.ArgumentParser()
In [71]: parser.add_argument('fruit', nargs = '*');
    ...: parser.add_argument('-l', '--ls');

您的错误-前两个字符串使用/填充了fruit位置。没有一个位置可以选择最后一个。

代码语言:javascript
复制
In [72]: parser.parse_args('apple banana -l list pinaple'.split())
usage: ipython3 [-h] [-l LS] [fruit [fruit ...]]
ipython3: error: unrecognized arguments: pinaple
...

parse_known_args在另一个列表中返回这些额外的值,而不是引发错误:

代码语言:javascript
复制
In [73]: parser.parse_known_args('apple banana -l list pinaple'.split())
Out[73]: (Namespace(fruit=['apple', 'banana'], ls='list'), ['pinaple'])

intermixed可以处理拆分的“位置”:

代码语言:javascript
复制
In [74]: parser.parse_intermixed_args('apple banana -l list pinaple'.split())
Out[74]: Namespace(fruit=['apple', 'banana', 'pinaple'], ls='list')
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53896556

复制
相关文章

相似问题

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