Python命令行

时间:2018-05-07 20:07:48

标签: python python-3.x command-line

我正在开发一个有目的或学习Python的简单项目,实际上我有3.6版本,我想构建一个命令行工具来生成具有特定条件的密码。这里的票价就是我得到的:

import argparse
parser = argparse.ArgumentParser()
group = parser.add_mutually_exclusive_group()
group.add_argument("-a", "-auto", help="auto mode", action="store_true")
group.add_argument("-m", "-manual", help="manual mode", action="store_true")
parser.parse_args() 

死胡同是我不知道如何限制命令,例如-l -lenght-m另一个停止的要求,我如何定义-l以便它可以接受一个值,例如-l:8来指定8个字符的密码,我还想对-l值设置范围限制,例如-l:8-256,最后,我不明白它们之间的区别在定义参数时---

我已经完成了生成密码的所有部分,只需要一种从外部控制其流量的方法,因此实现参数看起来是一种很好的方法。

2 个答案:

答案 0 :(得分:2)

您正在寻找的是选择选项。

add_argument('--length', type=int, choices=range(8,257)

这只接受8到256(含)之间的整数值。

至于你的第二个问题,-表示选项的简写,这在大多数CLI工具中很常见,而--表示长手。通常的做法是CLI工具为选项提供长手和短手。

答案 1 :(得分:1)

您可以定义自定义类型以检查有效值:

from argparse import ArgumentTypeError

def passwd_len(s):
    try:
        s = int(s)
    except ValueError:
        raise ArgumentTypeError("'%s' is not an integer" % (s,))

    if not (8 <= s <= 256):
        raise ArgumentTypeError("%d is not between 8 and 256, inclusive" % (s,))

    return s

parser.add_argument("--length", "-l", type=passwd_len)

---之间的差异是惯例之一。从历史上看,选项是以-为前缀的单字母参数,可以组合选项组:-ab-a -b相同。为了 支持约定允许更长的选项名称,一个新的约定 使用--为多字符名称添加前缀的方法被设计出来了。 --length是一个选项,不是一组六个选项-l-e-n-g-t和{{1 }}。长选项无法分组。

我会像这样定义-h-a选项:

-m

现在不是拥有两个永远不会具有相同值的布尔属性,而是只有一个属性可以直接检查。将group = parser.add_mutually_exclusive_group() group.add_argument("-a", "--auto", help="auto mode", action="store_const", const="auto", dest="mode") group.add_argument("-m", "--manual", help="manual mode", action="store_const", const="manual", dest="mode") group.add_argument("--mode", choices=["auto", "manual"]) 视为选择模式的规范方式,--mode-a作为选择特定模式的快捷方式。