argparse:解析 -h(此处为一些字符串):更改默认行为
argparse: parsing -h(some string here): changing default behavior
当我执行以下操作时:
import argparse
parser = argparse.ArgumentParser()
parser.parse_args(['-ha'])
我得到:
usage: [-h]
error: argument -h/--help: ignored explicit argument 'a'
注: -h
在这里是 运行 用法:[-h]
.
但我想得到:
error: unrecognized arguments: -ha
没有 运行宁 -h
.
我知道这是 argparse
的默认行为,但我需要更改它,我想知道是否有解决方法。
我仍然希望 -h
和 --help
工作。
argparse
缩写形式只有一个字符。
-ah
等价于 -h -a
.
如果你想 ha
作为单一参数,你必须使用 --ha
实际上,此行为与“-h”的帮助无关,而是一个带有 0 个参数的标志:
In [1]: import argparse
In [2]: parser = argparse.ArgumentParser()
In [3]: parser.add_argument('-f', action='store_true')
In [4]: parser.parse_args(['-f'])
Out[4]: Namespace(f=True)
In [5]: parser.parse_args(['-fa'])
usage: ipython3 [-h] [-f]
ipython3: error: argument -f: ignored explicit argument 'a'
这个错误是由处理短选项的核心函数引发的。 '-f' 被识别为带有 0 个参数的短可选。所以它不能被解析为'-f a'。由于 '-a' 没有被定义,它不能将它解析为 '-f -a'。
这是定义帮助的明确方法:
parser = argparse.ArgumentParser(add_help=False)
parser.add_argument('-h', '--help', action='help')
它的行为与默认值相同,但可以使用不同的标志字符串或不同的 action
进行自定义。编写自定义 action
class 比我现在想要的要复杂得多,但是您可以通过查看 argparse.py
中的 _HelpAction
subclass 来获得灵感文件。
我打算建议制作它 store_true
并在之后进行帮助处理,但我已经证明 store_true
有一个额外的字符串也有同样的问题。
你可以试试:
In [21]: parser = argparse.ArgumentParser(add_help=False)
In [22]: parser.add_argument('-h', '--help', nargs='?', default=False, const=Tru
...: e);
In [23]: parser.parse_args(['-h'])
Out[23]: Namespace(help=True)
In [24]: parser.parse_args([])
Out[24]: Namespace(help=False)
In [25]: parser.parse_args(['-ha'])
Out[25]: Namespace(help='a')
In [26]: parser.parse_args(['-h','a'])
Out[26]: Namespace(help='a')
当我执行以下操作时:
import argparse
parser = argparse.ArgumentParser()
parser.parse_args(['-ha'])
我得到:
usage: [-h]
error: argument -h/--help: ignored explicit argument 'a'
注: -h
在这里是 运行 用法:[-h]
.
但我想得到:
error: unrecognized arguments: -ha
没有 运行宁 -h
.
我知道这是 argparse
的默认行为,但我需要更改它,我想知道是否有解决方法。
我仍然希望 -h
和 --help
工作。
argparse
缩写形式只有一个字符。
-ah
等价于 -h -a
.
如果你想 ha
作为单一参数,你必须使用 --ha
实际上,此行为与“-h”的帮助无关,而是一个带有 0 个参数的标志:
In [1]: import argparse
In [2]: parser = argparse.ArgumentParser()
In [3]: parser.add_argument('-f', action='store_true')
In [4]: parser.parse_args(['-f'])
Out[4]: Namespace(f=True)
In [5]: parser.parse_args(['-fa'])
usage: ipython3 [-h] [-f]
ipython3: error: argument -f: ignored explicit argument 'a'
这个错误是由处理短选项的核心函数引发的。 '-f' 被识别为带有 0 个参数的短可选。所以它不能被解析为'-f a'。由于 '-a' 没有被定义,它不能将它解析为 '-f -a'。
这是定义帮助的明确方法:
parser = argparse.ArgumentParser(add_help=False)
parser.add_argument('-h', '--help', action='help')
它的行为与默认值相同,但可以使用不同的标志字符串或不同的 action
进行自定义。编写自定义 action
class 比我现在想要的要复杂得多,但是您可以通过查看 argparse.py
中的 _HelpAction
subclass 来获得灵感文件。
我打算建议制作它 store_true
并在之后进行帮助处理,但我已经证明 store_true
有一个额外的字符串也有同样的问题。
你可以试试:
In [21]: parser = argparse.ArgumentParser(add_help=False)
In [22]: parser.add_argument('-h', '--help', nargs='?', default=False, const=Tru
...: e);
In [23]: parser.parse_args(['-h'])
Out[23]: Namespace(help=True)
In [24]: parser.parse_args([])
Out[24]: Namespace(help=False)
In [25]: parser.parse_args(['-ha'])
Out[25]: Namespace(help='a')
In [26]: parser.parse_args(['-h','a'])
Out[26]: Namespace(help='a')