4

我将 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。可能吗?还有其他方法吗?

谢谢!

4

2 回答 2

9

使用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)
于 2013-11-08T11:43:13.543 回答
0

我以前没有使用过 argparse。但最近我在docopt https://github.com/docopt/docopt上看到了一篇让我大吃一惊的演讲。

也许试试看?

于 2013-11-08T11:35:46.400 回答