Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python argparse';s";“必需”;在帮助屏幕中被忽略?_Python_Argparse - Fatal编程技术网

Python argparse';s";“必需”;在帮助屏幕中被忽略?

Python argparse';s";“必需”;在帮助屏幕中被忽略?,python,argparse,Python,Argparse,考虑以下代码: import argparse parser = argparse.ArgumentParser() parser.add_argument('-o', required=True, nargs=1) parser.parse_args(['-h']) 为什么即使我说需要-o也会得到以下输出 usage: test.py [-h] -o O optional arguments: -h, --help show this help message and exit

考虑以下代码:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-o', required=True, nargs=1)
parser.parse_args(['-h'])
为什么即使我说需要
-o
也会得到以下输出

usage: test.py [-h] -o O

optional arguments:
  -h, --help  show this help message and exit
  -o O

我希望帮助文本说明需要
-o

通常,
argparse
的范例是按位置传递所需的参数,而作为选项传递的参数应该是可选的。考虑到这种“糟糕的形式”,甚至不鼓励设置
required
标志

我只能说,生成的误导性帮助消息是argparse中的一个小缺点,您可以在python的bug跟踪器上为它创建一个记录单

如果您需要一个必需的选项,则可以覆盖默认用法消息。

这是尚未修复的。你可以在那里读更多。请注意,用法行确实正确地指示需要开关(如果不需要,用法行将读取
use:test.py[-h][-o]
,而不是
use:test.py[-h]-o


为了解决这个问题,您可以给它一个
标题
。如链接页面上的示例所示,这允许您使用自己选择的名称创建组,而不是默认的
位置参数
可选参数
分组。

简单的答案是没有“必需参数”组。标记了两个默认组(无论好坏)

实际上有4个“需求”选项-普通选项、普通位置、必需选项、可选位置。如果名称混淆,请使用前两个名称。:)

产生:

usage: ipython3.5 [-h] -o O [-n N] foo [bar]

positional arguments:
  foo         a positional argument
  bar         optional positional argument

optional arguments:
  -h, --help  show this help message and exit
  -n N        normal optional

required arguments:
  -o O        required optional
这些备选方案以符号形式显示在使用行中,没有(可能)混淆的标签


值得一提的是,“optionals”和“positional”之间的区别深深地嵌入到
argparse
代码中。一种由标志字符串('-f','-foo')标识,另一种由位置标识。一个或另一个是“必需”的事实是肤浅的。唯一使一些选项成为“必需”的是在解析结束时进行一点错误检查。

这不是我想问的。问题是为什么它说它是可选的,而不是必需的。我很确定help标志的特殊情况是忽略其余的参数,因为期望它们不重要,因为您要做的只是打印帮助,然后立即退出。尽管如此,“帮助”屏幕显然是错误的。正如“推荐”是构建CLI的一个非常好的库一样,我会说它没有显示足够的信息,但并不是说它错了。它并没有说
-o
是可选的。。。它只是没有指定。你能详细说明一下如何最好地更改
ArgumentParser
对象的默认用法消息(部分内容)吗?该修补程序正在失效,部分原因是没有人提出一个简单的、被广泛接受的备选名称对。
parser = argparse.ArgumentParser()
parser.add_argument('foo', help='a positional argument')
reqgroup=parser.add_argument_group('required arguments')
reqgroup.add_argument('-o', required=True, help='required optional')
parser.add_argument('-n',  help='normal optional')
parser.add_argument('bar',nargs='?', help='optional positional argument')
parser.print_help()
usage: ipython3.5 [-h] -o O [-n N] foo [bar]

positional arguments:
  foo         a positional argument
  bar         optional positional argument

optional arguments:
  -h, --help  show this help message and exit
  -n N        normal optional

required arguments:
  -o O        required optional