argparse:同时使用store_true和int

5
我正在使用argparse进行cli参数解析。 我想要一个名为 -t 的选项来执行温度测试。 我还想指定温度测量周期。
我希望: python myscript.py -t 每60秒执行一次测量, python myscript.py -t 30 每30秒执行一次测量, python myscript.py 不执行温度测量。
目前,我的实现方式如下:
parser.add_argument('-t', '--temperature',
                    help='performs temperature test (period in sec)',
                    type=int, default=60, metavar='PERIOD')

问题在于我无法区分python myscript.pypython myscript.py -t之间的差异。
我希望能够像action='store_true'type=int同时执行一样。这可能吗?还有其他方法可以实现吗?
谢谢!
2个回答

12

使用const参数:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument(
    '-t', '--temperature',
    help='performs temperature test (period in sec)',
    type=int,
    nargs='?',
    const=60,         # Default value if -t is supplied
    default=None,     # Default value if -t is not supplied
    metavar='PERIOD')

args = parser.parse_args()
print(args)

% test.py
Namespace(temperature=None)
% test.py -t
Namespace(temperature=60)
% test.py -t 30
Namespace(temperature=30)

谢谢。这正是我需要的。const(http://docs.python.org/3.3/library/argparse.html#const)和nargs(http://docs.python.org/3.3/library/argparse.html#nargs)的文档。 - Diego Herranz

0

谢谢你的回答。我不知道这个,它可能很有趣,但对于这个项目,我会坚持使用argparse。 - Diego Herranz
不用客气。我知道我的回答并没有太大的帮助,但是 docopt 就在我脑海中,我不得不提一下它。 - William Denman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接