Python argparse可选破折号整数参数
是否可以添加argparse为-,的可选参数 类似于unixPython argparse可选破折号整数参数,python,python-3.x,argparse,Python,Python 3.x,Argparse,是否可以添加argparse为-,的可选参数 类似于unixhead和tail命令,它们接受打印行数, 或者类似于接受的git log,比如说要打印多少个日志条目 比如说, head -4 # print four lines tail -12 # print 12 lines. git log -7 # print 7 log entries 然而,该参数是可选的,例如,这些参数都有效: head # print default number of lines
head
和tail
命令,它们接受打印行数,或者类似于接受的git log,比如说要打印多少个日志条目 比如说,
head -4 # print four lines
tail -12 # print 12 lines.
git log -7 # print 7 log entries
然而,该参数是可选的,例如,这些参数都有效:
head # print default number of lines
tail # print default number of lines
git log # print all log entries through system pager
在Python中是否有一种通用和/或公认的方法来实现这一点?
谢谢。argparse不支持动态选项名称 来源:我试着做你要求的事情
您可以自己完成任务,但它必须在
argparse
之前或之后运行,并且必须修改sys.argv
。这使得解决方案的一半将是单步执行argparse
。我建议您尝试找到一个支持这种类型的参数传递的库。尝试接受破折号作为参数标志会产生歧义。何时应将其解释为负数,何时应将其解释为标志?此外,argparse
不允许“动态”或模式;您必须定义每个标志
如果类型为int
,则通常将“-2”解析为数值:
In [250]: p=argparse.ArgumentParser()
In [251]: p.add_argument('foo', type=int);
In [252]: p.parse_args(['-2'])
Out[252]: Namespace(foo=-2)
我们可以使用数字字符定义标志:
In [253]: p.add_argument('-3','--third');
In [254]: p.parse_args(['2'])
Out[254]: Namespace(foo=2, third=None)
这将禁用负数的使用:
In [255]: p.parse_args(['-2'])
usage: ipython3 [-h] [-3 THIRD] foo
ipython3: error: the following arguments are required: foo
In [257]: p.parse_args('-3 xxx 3'.split())
Out[257]: Namespace(foo=3, third='xxx')
In [260]: p.parse_args('-3 -1 3'.split())
usage: ipython3 [-h] [-3 THIRD] foo
ipython3: error: argument -3/--third: expected one argument
根据gnu unix/linux,您想要的模式已经过时
通常情况下,使用以下命令指定行:
‘-n [-]num’
其中负值从末尾开始计数(就像Python中的负切片那样)
像这样的工具的早期版本直接(在C代码中)解析命令行值,使用作者认为方便的语法(从编码的角度和最终用法一样)。你也可以按照另一个答案中的说明来做。但是随着系统的成熟,开发人员使用了诸如getopt
之类的解析器,并试图标准化使用。一般来说,
argparse
基于POSIX标准,通过getopt
和optparse
模块继承而来。为什么要用“-4”而不是“4”(假设你不是指负整数)?@hpaulj——不是。不是负整数。。。破折号,因为它是一个选项。如上问题所述,我们的想法是遵循其他命令已经建立的相同约定(“head”、“tail”、“git log”、“kill”,仅举几个接受作为选项的命令)。
For compatibility head also supports an obsolete option syntax -[num][bkm][cqv]