带有选择选项的条件 argparse
Conditional argparse with choice option
以下是我在模块中编写的三个参数。
parser.add_argument('--Type',type=str,choices=['a','b','c'],help='Options include: a,b,c.',required=True)
parser.add_argument('--Input',default=False,help='Generate input files',required=False)
parser.add_argument('--Directory',default=False,help='Secondary directory',required='--Input' in sys.argv)
--Type
可以有三个选项:a,b,c。
目前,我已将其设置为,如果 --Directory 为真,则需要 --Input 为真。
但是,我想在 --Directory 中添加一个附加条件,要求 --Type 为 == 'c'。
如何更改 --Directory 参数中的必需选项,使其同时需要 --Input 和 --Type == 'c'?
这不是最漂亮的,但您可以查找 --Type
旁边的参数并检查它是否等于 'c'
,如下所示:
parser.add_argument('--Directory', default=False, help='secondary directory',
required=('--Type' in sys.argv and
sys.argv[sys.argv.index('--Type') + 1] == 'c')
)
我觉得这样也可以
import sys
# Your past code here
args = parser.parse_args()
type = args.Type
input = args.Input
directory = args.Directory
if directory:
if input != 'c':
print 'error in argument'
sys.exit(1)
将参数解析与您的要求分离。
parser.add_argument('--Type', choices=['a','b','c'], required=True)
parser.add_argument('--Input', action='store_true')
parser.add_argument('--Directory', action='store_true')
args = parser.parse_args()
if args.Directory and args.Type != 'c' and not args.input:
raise argparse.ArgumentError("--Directory requires --Type c and --Input")
(注意 action='store_true'
自动设置 type=bool
和 default=False
。)
我不会对其中任何一个使用 required
参数,它容易出错且可读性差。解析后检查参数的有效性即可。
import argparse
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument('--Type', type=str, choices=['a','b','c'], help='Options include: a,b,c.', required=True)
parser.add_argument('--Input', default=False, help='Generate input files', required=False)
parser.add_argument('--Directory', default=False, help='Secondary directory', required=False)
parsed_args = parser.parse_args()
if parsed_args.Directory and not (parsed_args.Input and parsed_args.Type == 'c'):
parser.error('option --Directory requires --Input and --Type c.')
以下是我在模块中编写的三个参数。
parser.add_argument('--Type',type=str,choices=['a','b','c'],help='Options include: a,b,c.',required=True)
parser.add_argument('--Input',default=False,help='Generate input files',required=False)
parser.add_argument('--Directory',default=False,help='Secondary directory',required='--Input' in sys.argv)
--Type
可以有三个选项:a,b,c。
目前,我已将其设置为,如果 --Directory 为真,则需要 --Input 为真。
但是,我想在 --Directory 中添加一个附加条件,要求 --Type 为 == 'c'。
如何更改 --Directory 参数中的必需选项,使其同时需要 --Input 和 --Type == 'c'?
这不是最漂亮的,但您可以查找 --Type
旁边的参数并检查它是否等于 'c'
,如下所示:
parser.add_argument('--Directory', default=False, help='secondary directory',
required=('--Type' in sys.argv and
sys.argv[sys.argv.index('--Type') + 1] == 'c')
)
我觉得这样也可以
import sys
# Your past code here
args = parser.parse_args()
type = args.Type
input = args.Input
directory = args.Directory
if directory:
if input != 'c':
print 'error in argument'
sys.exit(1)
将参数解析与您的要求分离。
parser.add_argument('--Type', choices=['a','b','c'], required=True)
parser.add_argument('--Input', action='store_true')
parser.add_argument('--Directory', action='store_true')
args = parser.parse_args()
if args.Directory and args.Type != 'c' and not args.input:
raise argparse.ArgumentError("--Directory requires --Type c and --Input")
(注意 action='store_true'
自动设置 type=bool
和 default=False
。)
我不会对其中任何一个使用 required
参数,它容易出错且可读性差。解析后检查参数的有效性即可。
import argparse
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument('--Type', type=str, choices=['a','b','c'], help='Options include: a,b,c.', required=True)
parser.add_argument('--Input', default=False, help='Generate input files', required=False)
parser.add_argument('--Directory', default=False, help='Secondary directory', required=False)
parsed_args = parser.parse_args()
if parsed_args.Directory and not (parsed_args.Input and parsed_args.Type == 'c'):
parser.error('option --Directory requires --Input and --Type c.')