依赖于argpar的其他参数的参数

2024-06-28 20:03:31 发布

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

我想完成这样的事情:

-LoadFiles
    -SourceFile "" -DestPath ""
    -SourceFolder "" -DestPath ""
-GenericOperation
    -SpecificOperation -Arga "" -Argb ""
    -OtherOperation -Argc "" -Argb "" -Argc ""

用户应该能够运行以下操作:

-LoadFiles -SourceFile "somePath" -DestPath "somePath"

或者

-LoadFiles -SourceFolder "somePath" -DestPath "somePath"

基本上,如果你有-LoadFiles,你需要有-SourceFile-SourceFolder之后。如果你有-SourceFile,你需要有-DestPath

是否可以为其他参数提供此必需参数链?如果没有,我至少可以做些类似的事情,如果你有-SourceFile,那么你一定有-DestPath


Tags: 用户参数事情argcsomepathsourcefileargaargb
3条回答

您可以在argparse中使用子parser

 import argparse
 parser = argparse.ArgumentParser(prog='PROG')
 parser.add_argument('--foo', required=True, help='foo help')
 subparsers = parser.add_subparsers(help='sub-command help')

 # create the parser for the "bar" command
 parser_a = subparsers.add_parser('bar', help='a help')
 parser_a.add_argument('bar', type=int, help='bar help')
 print(parser.parse_args())

有一些argparse替代方案,您可以轻松地管理您所提到的情况。 包装如下: clickdocopt

如果我们想绕过argparse中链式参数的手动实现,请查看click中的Commands and Groups

在您对已创建的ArgumentParser实例调用parse_args之后,它将为您提供一个Namespace对象。简单地检查一下,如果其中一个参数存在,那么另一个也必须存在。比如:

args = parser.parse_args()
if ('LoadFiles' in vars(args) and 
    'SourceFolder' not in vars(args) and 
    'SourceFile' not in vars(args)):

    parser.error('The -LoadFiles argument requires the -SourceFolder or -SourceFile')

相关问题 更多 >