如何在Python 2.7中评估BASH-Like命令(if / elif / else)语句

时间:2017-04-02 17:47:44

标签: python windows python-2.7 argparse

我正在创建一个Hacking Sim游戏。

在我的游戏中,我正在尝试为玩家使用BASH脚本。

请注意:

  • 玩家可以与其他玩家共享脚本
  • 所有" BASH"命令是自定义的,由我的游戏处理
  • 命令目前由argparse
  • 处理
  • 此游戏适用于Windows,用Python2.7编写

以下是我处理命令的示例:

class Console():
    def do_echo(self, args):
        cmd_echo = argparse.ArgumentParser(description="Prints out whatever you pass it", prog='echo')
        cmd_echo.add_argument("text",  metavar=("<text>"), help="The text to echo (\"in quotes\")", default=None)

        # Processes the command - Capture '--help' or argument errors (e.g: Typos)
        try: arg = cmd_echo.parse_args(args)
        except SystemExit: return # Voids the SystemExit that argparse calls, while allowing other errors

        print arg.text

def run(command)
    sys_args = shlex.split(command)
    if 'do_'+sys_args[0].lower() in dir(Console):
        function = sys_args[0] ; sys_args.pop(0)
        fn = 'Console().do_%s(%s)' % (function,sys_args)
        eval(fn)

处理脚本(.sh)时我只使用for line in f.readlines(): run(line)。 (是的,我知道&#34; eval是badddd&#34;但我实际上已经尝试利用这个过程并且没有任何结果。)从游戏终端发送的命令以相同的方式解析。

但是,我需要知道如何处理if/else/for/etc..

如何在我当前的代码中实现这一点?

1 个答案:

答案 0 :(得分:0)

最终,如果您需要用户可编程脚本,则需要进行某种解释和执行。此外,根据安全性对您的重要程度,您必须考虑这些脚本执行的上下文以及它们可以执行的操作。

我强烈建议您从以下内容开始:http://norvig.com/lispy.html。这是在python之上实现解释语言的一个非常简单的例子。祝你好运!