【问题标题】:conditional args parse in pythonpython中的条件参数解析
【发布时间】:2021-10-26 23:43:56
【问题描述】:

我想要一个将第一个参数作为工具的代码,然后根据工具需要不同的选项

myapp.py [工具] [工具参数]

python myapp.py tool0 -i 'path/to/my_image.jpg' -o 'path/to/my_output_path_folder/' -r 0.7 -m 13

python myapp.py tool1 -m 3 -r 'some_string_now' -m 13

正如您在这种情况下所看到的,每个工具都可以有自己的必需参数,并且在每种情况下它们甚至可以期望不同的类型

我一直在玩弄add_subparsers 并取得了一些成功。

import argparse

parser = argparse.ArgumentParser(prog='myapp', usage='%(prog)s [tool] [options]')

parser.add_argument('-a', required=True, help='required globally argument for all tools')

subparsers = parser.add_subparsers(help='tool help')

#  subparser for tool0
parser_tool0 = subparsers.add_parser('tool0', help='tool 0 help')

# ADD tool0 ARGUMENTS
parser_tool0.add_argument('-i' , required=True, help='path to the input folder')
parser_tool0.add_argument('-o' , required=True, help='path to the output folder')
parser_tool0.add_argument('-r' , default=0.7,   type=float, help='some float')
parser_tool0.add_argument('-g' , default=10,    type=int, help='some integrer')
parser_tool0.add_argument('-d' , default=False, help='debug')


#  subparser for tool1
parser_tool0 = subparsers.add_parser('tool1', help='tool 0 help')

# ADD tool0 ARGUMENTS
parser_tool0.add_argument('-r' , help='r not required string')
parser_tool0.add_argument('-f' , required=True, help='f not required string')
parser_tool0.add_argument('-d' , default=0.7,   type=float, help='some float')
parser_tool0.add_argument('-i' , default=10,    type=int, help='some integrer')
parser_tool0.add_argument('-b' , default=False, help='boolean')
parser_tool0.add_argument('opts',
                        help='Modify config options using the command-line',
                        default=None, nargs=argparse.REMAINDER)

args = parser.parse_args()
print(args)

所以我想知道该案例的最佳做法是什么。

提前致谢

【问题讨论】:

    标签: python parsing args


    【解决方案1】:

    根据docs 和这个so answer subparsers 是要走的路。

    【讨论】:

      猜你喜欢
      • 2018-09-22
      • 2012-12-07
      • 2016-04-13
      • 1970-01-01
      • 2012-10-08
      • 2019-11-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-05
      相关资源
      最近更新 更多