Python argparse具有1对2参数的互斥组

时间:2013-12-10 15:58:31

标签: python argparse

在我搜索文本文件(日志)的脚本中,我使用argparse来获取命令行参数并定义搜索条件。

我使用--df和--dt来定义from =>期间。我还想要一个可选的--period,它将通过使用由自定义动作(例如“week”)解析的一些已定义的字符串来覆盖--df和--dt。现在,我希望--period与--df AND --dt互斥,但据我所知,add_mutually_exclusive_group()是不可能的。

我尝试了以下代码,但没有成功:

parser = argparse.ArgumentParser(description='Search the file')

dfgroup = parser.add_mutually_exclusive_group()
dfgroup.add_argument(
    '--df',
    type=dateparser.parse,
    metavar='DATETIME',
    help='date and/or time to search from'
)
dfgroup.add_argument(
    '--period',
    action='store', #should be a custom action
    metavar='PERIOD',
    help='the period to search within (mutually exclusive with --df and --dt)'
)
dtgroup = parser.add_mutually_exclusive_group()
dtgroup.add_argument(
    '--dt',
    type=dateparser.parse,
    metavar='DATETIME',
    help='date and/or time to search to'
)
dtgroup.add_argument(
    '--period',
    action='store', #should be a custom action
    metavar='PERIOD',
    help='the period to search within (mutually exclusive with --df and --dt)'
)

我有什么方法可以使用-df和--dt参数互相排斥(反之亦然)?

1 个答案:

答案 0 :(得分:4)

如果您对此解决方案非常确定和满意,我可以解决这个问题。像nargs这样使用add_argument

import argparse
parser = argparse.ArgumentParser(description="Hello")
group = parser.add_mutually_exclusive_group()
group.add_argument('--period', action='store')
group.add_argument('--df_dt', nargs='+')
args = parser.parse_args()

执行脚本时提供

program.py --period <period>
program.py --df_dt <df> <dt>

然后使用

访问参数
df = args.df_dt[0]
dt = args.df_dt[1]

希望有所帮助