argparse子parser的帮助中缺少字符

2024-06-10 03:58:44 发布

您现在位置:Python中文网/ 问答频道 /正文

import argparse

parser = argparse.ArgumentParser(formatter_class=argparse.RawTextHelpFormatter)
commands = parser.add_subparsers(title='Available Commands')

cmd1_parser = commands.add_parser('setup1', help="Setup Device 1")
cmd1_parser.add_argument('-f', "--freq", help="Frequency in (Hz)",  metavar='\b', type=int, required=True)
cmd1_parser.add_argument('-p', "--power", help="Power level in (dB)", metavar='\b', type=int, required=True)
cmd1_parser.add_argument('-c', "--current", help="Current (mA)",  metavar='\b', type=int, required=True)

cmd2_parser = commands.add_parser('setup2', help="Setup Device 2")
cmd2_parser.add_argument('-l', "--length", help="Length in meters",  metavar='\b', type=int, required=True)
cmd2_parser.add_argument('-b', "--breadth", help="Breadth in meters", metavar='\b', type=int, required=True)
cmd2_parser.add_argument('-w', "--width", help="Width in meters",  metavar='\b', type=int, required=True)

parser.print_help()
cmd1_parser.print_help()
cmd2_parser.print_help()

此帮助输出的结果:

usage: test2.py [-h] {setup1,setup2} ...

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

Available Commands:
  {setup1,setup2}
    setup1         Setup Device 1
    setup2         Setup Device 2
usage: test2.py setup1 [-h] -f -p -c

optional arguments:
  -h, --help         show this help message and exit
  -f, --freq     Frequency in (Hz)
  -, --power    Power level in (dB)
  -c, --current  Current (mA)
usage: test2.py setup2 [-h] -l -b -w

optional arguments:
  -h, --help         show this help message and exit
  -l, --length   Length in meters
  -, --breadth  Breadth in meters
  -w, --width    Width in meters

在Windows命令提示符中,“power”和“width”分别缺少字符“p”和“b”。 然而,用PyCharm获得正确的结果。在Google上搜索,但没有找到任何解决方案。 有人能告诉我怎么修吗?你知道吗


Tags: inaddtrueparsertyperequiredhelpargument
1条回答
网友
1楼 · 发布于 2024-06-10 03:58:44

更新:

作为您的新需求,请仔细查看add\u argmument()提供的选项,没有办法做到这一点。我认为最合适的是:

cmd1_parser = commands.add_parser('setup1', help="Setup Device 1")
cmd1_parser.add_argument('-f', ' freq', help="Frequency in (Hz)",  metavar='(Hz)',type=int, required=True)
cmd1_parser.add_argument('-p', " power", help="Power level in (dB)", metavar='(dB)', type=int, required=True)
cmd1_parser.add_argument('-c', " current", help="Current (mA)", metavar='(mA)', required=True) 

输出为:

optional arguments:
  -h,  help            show this help message and exit
  -f (Hz),  freq (Hz)  Frequency in (Hz)
  -p (dB),  power (dB)
                        Power level in (dB)
  -c (mA),  current (mA)
                        Current (mA)

=========================

旧答案:

只要用metavar=''替换metavar='\b',就行了\b'是一个backspace,在打印选项字符串之后,python将“打印”metavar(这个参数的一种名称),因此它将调用backspace并删除您的字符。你知道吗

以下是使用上述操作后的输出:

>>> parser.print_help()
usage: [-h] {setup1,setup2} ...

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

Available Commands:
  {setup1,setup2}
    setup1         Setup Device 1
    setup2         Setup Device 2
>>> cmd1_parser.print_help()
usage:  setup1 [-h] -f  -p  -c

optional arguments:
  -h,  help       show this help message and exit
  -f ,  freq      Frequency in (Hz)
  -p ,  power     Power level in (dB)
  -c ,  current   Current (mA)
>>> cmd2_parser.print_help()
usage:  setup2 [-h] -l  -b  -w

optional arguments:
  -h,  help       show this help message and exit
  -l ,  length    Length in meters
  -b ,  breadth   Breadth in meters
  -w ,  width     Width in meters

相关问题 更多 >