2017-04-02 68 views
0

我正在創建一個Hacking Sim遊戲。如何在Python 2.7中評估類BASH命令(如果/ elif/else)語句

在我的遊戲中,我試圖實現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)。 (是的,我知道「eval是badddd」,但我實際上試圖利用這個過程並且沒有任何東西。)從遊戲內終端發送的命令也以同樣的方式解析。

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

我怎麼能在我當前的代碼實現這一點?

+0

評論是不適合擴展討論;這個對話已經[轉移到聊天](http://chat.stackoverflow.com/rooms/139708/discussion-on-question-by-cyanite-how-to-evaluate-bash-like-commands-if-elif- EL)。 –

+0

@Bhargav一些評論(特別是最後幾篇)與帖子相關。 – Cyanite

+0

是的,他們都存檔在這裏http://chat.stackoverflow.com/transcript/139708 –

回答

0

最終如果你想要用戶可編程的腳本,你需要做一些解釋和執行。另外,根據安全對您的重要性,您必須考慮這些腳本正在執行的環境以及它們可以執行的操作。

我強烈建議你從類似的東西開始:http://norvig.com/lispy.html。這是一個在python之上實現解釋語言的非常簡單的例子。祝你好運!

+0

所有現有的命令是我spesifically在我的遊戲內創建的。我只想知道如何特別執行if和for命令。 – Cyanite

+0

我明白這一點,這正是您需要編寫口譯員的原因。如果你通過鏈接閱讀,我相信你會發現它非常有用。 – jmercouris

+0

今天早上我已經瀏覽過了。我已經有90%的代碼需要,我只需要知道如何解析多行命令。特別指出'如果[$ var1 == $ var2],然後 fi' – Cyanite