Python argparse可选破折号整数参数

Python 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

是否可以添加argparse为-,的可选参数

类似于unix
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]