首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何定义一个多层次的条件命令行ArgumentParser?

如何定义一个多层次的条件命令行ArgumentParser?
EN

Stack Overflow用户
提问于 2022-08-09 13:30:48
回答 1查看 36关注 0票数 0

我有一个包含多个脚本的python项目。该结构按以下方式组织:

代码语言:javascript
复制
project-folder
   ...
   src
      scripts
         script1
         script2
   __main__.py

我希望在project-folder级别执行脚本,在那里您可以以python -script1python -script2的形式调用要执行的脚本。如果您指定了script1,那么您可以为script1提供所有相关的命令行参数,即python -script1 -script1param1="..." -script1param2="..."等,用于script2应用相同的:python -script2 -script2param1="..." -script2param2="..."

我可以在脚本级别定义特定于脚本的cmd选项,比如python -script1param1="..." -script1param2="..."python -script2param1="..." -script2param2="...",在project-folder级别定义要运行哪个脚本的选项,无论是python -script1还是python -script2,但我不能将两者结合在一起。

对此有什么想法吗?

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2022-08-09 15:41:45

我想出了怎么做

(多亏了Conditional command line arguments in Python using argparseSelect limited arguments from Parent Parser)

代码语言:javascript
复制
parser = argparse.ArgumentParser(
    description="Run one of the following scripts.\n"
                "- 1: python . script1 -script1param1='...' -script1param2='...'\n"
                "- 2: python . script2 -script2param1='...' -script2param2='...'",
    formatter_class=RawTextHelpFormatter
)

subparsers = parser.add_subparsers(
    dest='action',
    help="Adds script specific command line arguments.")

script1_parser = script1.get_parser()
script1_parser = subparsers.add_parser("script1",
                                     parents=[script1_parser],
                                     add_help=False,
                                     help="Runs script 1.")
script2_parser = script2.get_parser()
script2_parser = subparsers.add_parser("script2",
                                     parents=[script2_parser],
                                     add_help=False,
                                     help="Runs script 2.")

args = parser.parse_args()

if args.action == 'script1':
    script1.main(args)
elif args.action == 'script2':
    script2.main(args)

因此,这里的关键要素实际上是:

  1. subparsers,我们可以根据action值(script1或2)附加一个“分支”解析器;
  2. add_parserparents参数。在每个脚本中,我们定义了它的args解析器,通过parents.

获得解析器,并将其传递给add_parser

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73292733

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档