解析命令CLI程序Python
我曾经用Python2编写(简单的)Python程序,但Python3似乎已经相当成熟了。我现在有一个名为解析命令CLI程序Python,python,parsing,command-line,Python,Parsing,Command Line,我曾经用Python2编写(简单的)Python程序,但Python3似乎已经相当成熟了。我现在有一个名为ratjuice.py的CLI程序,当我执行它时,程序会要求输入一个命令(我已经做了一些制表符完成的事情) 因此,我可能有html这样的命令,它可以输出parse或destroy这样的子命令。我可能想使用命令html parse rat.html。因此,我正在寻找一个Python模块,它允许我基于白名单解析这个输入。因此,我基本上会告诉什么是允许的,其余的被忽略或拒绝(如果我清理输入,我可能
ratjuice.py
的CLI程序,当我执行它时,程序会要求输入一个命令(我已经做了一些制表符完成的事情)
因此,我可能有html
这样的命令,它可以输出parse
或destroy
这样的子命令。我可能想使用命令html parse rat.html
。因此,我正在寻找一个Python模块,它允许我基于白名单解析这个输入。因此,我基本上会告诉什么是允许的,其余的被忽略或拒绝(如果我清理输入,我可能会忘记一些事情…)
除了简单的字符串操作之外,还有什么好办法吗?看看这个模块。它可以进行行编辑并记住历史记录(据推测)。我刚刚拼凑的一个字符串解析版本,不需要额外的库,与您的“白名单”理念相配合:
def foo1(bar):
print '1. ' + bar
def foo2(bar):
print '2. ' + bar
def foo3(bar):
print '3. ' + bar
cmds = {
'html': {
'parse': foo1,
'dump': foo2,
'read': {
'file': foo3,
}
}
}
def argparse(cmd):
cmd = cmd.strip()
cmdsLevel = cmds
while True:
candidate = [key for key in cmdsLevel.keys() if cmd.startswith(key)]
if not candidate:
print "Failure"
break
cmdsLevel = cmdsLevel[candidate[0]]
cmd = cmd[len(candidate[0]):].strip()
if not isinstance(cmdsLevel, dict):
cmdsLevel(cmd)
break
argparse('html parse rat.html')
argparse('foo')
argparse('html read file rat.html')
argparse('html dump rat.html')