解析命令CLI程序Python

解析命令CLI程序Python,python,parsing,command-line,Python,Parsing,Command Line,我曾经用Python2编写(简单的)Python程序,但Python3似乎已经相当成熟了。我现在有一个名为ratjuice.py的CLI程序,当我执行它时,程序会要求输入一个命令(我已经做了一些制表符完成的事情) 因此,我可能有html这样的命令,它可以输出parse或destroy这样的子命令。我可能想使用命令html parse rat.html。因此,我正在寻找一个Python模块,它允许我基于白名单解析这个输入。因此,我基本上会告诉什么是允许的,其余的被忽略或拒绝(如果我清理输入,我可能

我曾经用Python2编写(简单的)Python程序,但Python3似乎已经相当成熟了。我现在有一个名为
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')