当 nargs='+' 时,如何避免帮助消息的方括号 [...]?
How do I avoid bracketed [...] of help message when nargs='+'?
我正在尝试使用 Python 中的 argparse
模块编写命令行界面,但我 运行 遇到了关于我的一个论点的帮助消息的麻烦.该参数应采用 1 个参数(文件名)或 3 个参数(文件名、列、列),所以这就是我处理它的方式:
parser = argparse.ArgumentParser()
parser.add_argument('--score', nargs ='+', help='score file, default X Y = 2 4',
metavar='FILENAME X Y')
args = parser.parse_args()
然后是 if-else:
if len(args.score) == 1:
data = open(args.score[0])
S1 = 1
S2 = 3
elif len(args.score) == 3:
data = open(args.score[0])
S1 = int(args.score[1]) - 1
S2 = int(args.score[2]) - 1
else:
print('Error: --score incorrect number of arguments called')
但是我的帮助信息是这样的:
-h, --help show this help message and exit
--score FILENAME X Y [FILENAME X Y ...]
score file, default X Y = 2 4
我希望括号内的部分消失:
-h, --help show this help message and exit
--score FILENAME X Y score file, default X Y = 2 4
编辑
以下是我选择使用 ANSI 转义码实施修复的方法,尽管是一种变通方法:
parser.add_argument('--score', nargs ='+', help='\x1b[A\b\b\b\b\b\b X Y \x1b[1C\b score file, default X Y = 2 4',
metavar=('FILENAME', ''))
给出输出
usage: test.py [-h] [--score FILENAME [...]]
optional arguments:
-h, --help show this help message and exit
--score FILENAME X Y score file, default X Y = 2 4
感谢@hpaulj 元组元组的想法。
你所做的在命令行界面的世界里是非常不标准的。您应该重新设计参数语法。而不是支持这两个:
--score FILENAME
--score FILENAME X Y
您应该考虑以下替代方案之一:
--score FILENAME [-x X] [-y Y]
--score FILENAME[=X,Y]
使用标准命令行参数解析库可以轻松支持这两者。
没有 metavar
帮助是:
usage: ipython3 [-h] [--score SCORE [SCORE ...]]
optional arguments:
-h, --help show this help message and exit
--score SCORE [SCORE ...]
score file, default X Y = 2 4
SCORE
由 longname 导出,'%s [%s ...]' % get_metavar(2)
格式化。
如果我将 metavar 更改为包含 2 个项目的元组,它们将替换 SCORE
的那两个实例
usage: ipython3 [-h] [--score NAME [XY ...]]
optional arguments:
-h, --help show this help message and exit
--score NAME [XY ...]
score file, default X Y = 2 4
使用 nargs=3,我可以在 metavar 中输入这些词并得到:
usage: ipython3 [-h] [--score NAME X Y]
....
将输入分成 2 个参数得到
In [774]: parser.add_argument('--FILENAME', help='score file', metavar='NAME');
In [775]: parser.add_argument('--XY', nargs=2, help='x,y'); # type=int
In [776]: parser.print_help()
usage: ipython3 [-h] [--FILENAME NAME] [--XY XY XY]
optional arguments:
-h, --help show this help message and exit
--FILENAME NAME score file
--XY XY XY x,y
=================
实际格式由HelpFormatter._format_args
方法产生:
def _format_args(self, action, default_metavar):
get_metavar = self._metavar_formatter(action, default_metavar)
....
elif action.nargs == ONE_OR_MORE:
result = '%s [%s ...]' % get_metavar(2)
...
我正在尝试使用 Python 中的 argparse
模块编写命令行界面,但我 运行 遇到了关于我的一个论点的帮助消息的麻烦.该参数应采用 1 个参数(文件名)或 3 个参数(文件名、列、列),所以这就是我处理它的方式:
parser = argparse.ArgumentParser()
parser.add_argument('--score', nargs ='+', help='score file, default X Y = 2 4',
metavar='FILENAME X Y')
args = parser.parse_args()
然后是 if-else:
if len(args.score) == 1:
data = open(args.score[0])
S1 = 1
S2 = 3
elif len(args.score) == 3:
data = open(args.score[0])
S1 = int(args.score[1]) - 1
S2 = int(args.score[2]) - 1
else:
print('Error: --score incorrect number of arguments called')
但是我的帮助信息是这样的:
-h, --help show this help message and exit
--score FILENAME X Y [FILENAME X Y ...]
score file, default X Y = 2 4
我希望括号内的部分消失:
-h, --help show this help message and exit
--score FILENAME X Y score file, default X Y = 2 4
编辑
以下是我选择使用 ANSI 转义码实施修复的方法,尽管是一种变通方法:
parser.add_argument('--score', nargs ='+', help='\x1b[A\b\b\b\b\b\b X Y \x1b[1C\b score file, default X Y = 2 4',
metavar=('FILENAME', ''))
给出输出
usage: test.py [-h] [--score FILENAME [...]]
optional arguments:
-h, --help show this help message and exit
--score FILENAME X Y score file, default X Y = 2 4
感谢@hpaulj 元组元组的想法。
你所做的在命令行界面的世界里是非常不标准的。您应该重新设计参数语法。而不是支持这两个:
--score FILENAME
--score FILENAME X Y
您应该考虑以下替代方案之一:
--score FILENAME [-x X] [-y Y]
--score FILENAME[=X,Y]
使用标准命令行参数解析库可以轻松支持这两者。
没有 metavar
帮助是:
usage: ipython3 [-h] [--score SCORE [SCORE ...]]
optional arguments:
-h, --help show this help message and exit
--score SCORE [SCORE ...]
score file, default X Y = 2 4
SCORE
由 longname 导出,'%s [%s ...]' % get_metavar(2)
格式化。
如果我将 metavar 更改为包含 2 个项目的元组,它们将替换 SCORE
usage: ipython3 [-h] [--score NAME [XY ...]]
optional arguments:
-h, --help show this help message and exit
--score NAME [XY ...]
score file, default X Y = 2 4
使用 nargs=3,我可以在 metavar 中输入这些词并得到:
usage: ipython3 [-h] [--score NAME X Y]
....
将输入分成 2 个参数得到
In [774]: parser.add_argument('--FILENAME', help='score file', metavar='NAME');
In [775]: parser.add_argument('--XY', nargs=2, help='x,y'); # type=int
In [776]: parser.print_help()
usage: ipython3 [-h] [--FILENAME NAME] [--XY XY XY]
optional arguments:
-h, --help show this help message and exit
--FILENAME NAME score file
--XY XY XY x,y
=================
实际格式由HelpFormatter._format_args
方法产生:
def _format_args(self, action, default_metavar):
get_metavar = self._metavar_formatter(action, default_metavar)
....
elif action.nargs == ONE_OR_MORE:
result = '%s [%s ...]' % get_metavar(2)
...