我有一个包含多个脚本的python项目。该结构按以下方式组织:
project-folder
...
src
scripts
script1
script2
__main__.py我希望在project-folder级别执行脚本,在那里您可以以python -script1或python -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,但我不能将两者结合在一起。
对此有什么想法吗?
提前谢谢。
发布于 2022-08-09 15:41:45
我想出了怎么做
(多亏了Conditional command line arguments in Python using argparse和Select limited arguments from Parent Parser)
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)因此,这里的关键要素实际上是:
subparsers,我们可以根据action值(script1或2)附加一个“分支”解析器;add_parser的parents参数。在每个脚本中,我们定义了它的args解析器,通过parents.获得解析器,并将其传递给add_parser。
https://stackoverflow.com/questions/73292733
复制相似问题