我正在創建一個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..
我怎麼能在我當前的代碼實現這一點?
評論是不適合擴展討論;這個對話已經[轉移到聊天](http://chat.stackoverflow.com/rooms/139708/discussion-on-question-by-cyanite-how-to-evaluate-bash-like-commands-if-elif- EL)。 –
@Bhargav一些評論(特別是最後幾篇)與帖子相關。 – Cyanite
是的,他們都存檔在這裏http://chat.stackoverflow.com/transcript/139708 –