在argparse中使用互斥参数?

2024-09-30 04:28:59 发布

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

必须从命令行读取某些数据(如电子邮件地址)的列表:

some_util -l email1@x.com email2@x.com

或者从文件中:

^{pr2}$

如何使它不能在argparse中使用两个键-l和-l的组合

import argparse
import sys
def createCLParser():
    parser = argparse.ArgumentParser()
    parser.add_argument('-l', '--list', nargs='+', help='list from comand line')
    parser.add_argument('-L', '--list-file', type=argparse.FileType(), help='list from file')
    return parser
if __name__ == '__main__':
    parser = createCLParser()
    namespace = parser.parse_args(sys.argv[1:])

在argparse中是一个方法add_mutual_exclusive_group(),但它必须是可选的。在


Tags: 数据命令行fromimportcomaddparser电子邮件
2条回答

因为其中一个是必需的,因此此用例更适合于子命令:

some_util fromList email1@x.com email2@x.com

或者

^{pr2}$

代码应该类似

import argparse

parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers()
addr_parser = subparsers.add_parser("fromList")
file_parser = subparsers.add_parser("fromFile")

addr_parser.add_argument("addresses", nargs="+")
addr_parser.setdefaults(command="fromList")
file_parser.add_argument("address_file")
file_parser.setdefaults(command="fromFile")

parser.set_defaults(
args = parser.parse_args()

if args.command == "fromList":
    # use args.addresses
elif args.command == "fromFile":
    # read addresses from file named by args.address_file

^{}方法与required=True一起使用:

import argparse
import sys
def createCLParser():
    parser = argparse.ArgumentParser()
    group = parser.add_mutually_exclusive_group(required=True)
    group.add_argument('-l', ' list', nargs='+', help='list from comand line')
    group.add_argument('-L', ' list-file', type=argparse.FileType(), help='list from file')

    return parser
if __name__ == '__main__':
    parser = createCLParser()
    namespace = parser.parse_args(sys.argv[1:])
    print namespace

用法:

^{pr2}$

相关问题 更多 >

    热门问题