我正在开发一个有目的或学习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
,最后,我不明白它们之间的区别在定义参数时-
和--
。
我已经完成了生成密码的所有部分,只需要一种从外部控制其流量的方法,因此实现参数看起来是一种很好的方法。
答案 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
作为选择特定模式的快捷方式。