1

我曾经用 Python 2 编写我的(简单的)Python 程序,但似乎 Python 3 已经相当成熟了。我现在调用了一个 CLI 程序ratjuice.py,当我执行它时,程序会要求输入命令(我已经为此做了一些选项卡完成)。

所以我可能有类似html的命令,可以输出像parseor之类的子命令destroy。我可能想使用命令html parse rat.html。所以我正在寻找一个 Python 模块,它允许我根据白名单解析这个输入。所以我基本上会告诉什么是允许的,其余的被忽略或拒绝(如果我清理输入,我可能会忘记一些事情......)

除了简单的字符串操作之外,还有什么好的方法可以做到这一点?

4

2 回答 2

1

看看cmd模块。它进行行编辑并记住历史(据说)。

于 2012-08-15T18:43:34.517 回答
1

我刚刚拼凑的一个字符串解析版本,不需要额外的库,它适用于您的“白名单”想法:

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')
于 2012-08-15T18:45:30.770 回答