Changeset 624


Ignore:
Timestamp:
08/04/10 19:01:11 (9 years ago)
Author:
vaporice
Message:

Makes it possible to use python in the ingame console

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/game/scripts/console.py

    r584 r624  
    1616import re 
    1717import os 
     18import sys 
     19from StringIO import StringIO 
    1820 
    1921class Console: 
     
    100102           @param command: The command to run 
    101103           @return: The resultstring""" 
    102         result = None 
    103         python_regex = re.compile('^python') 
    104         python_matches = python_regex.match(command.lower()) 
    105         if (python_matches is not None): 
    106             end_python = command[python_matches.end() + 1:] 
    107             try: 
    108                 result = str(eval(compile(end_python,'<string>','eval'))) 
    109             except Exception, e: 
    110                 result = str(e)        
    111         return result 
     104 
     105        code = command[7:len(command)] 
     106 
     107        #Make parpg print to these variables and not to stdout   
     108        codeOut = StringIO() 
     109        codeErr = StringIO() 
     110 
     111        sys.stdout = codeOut 
     112        sys.stderr = codeErr 
     113 
     114        #execute python the code 
     115        exec(code) 
     116 
     117        #restore stdout 
     118        sys.stdout = sys.__stdout__ 
     119        sys.stderr = sys.__stderr__ 
     120 
     121        out = codeOut.getvalue() 
     122        err = codeOut.getvalue() 
     123         
     124        #create output 
     125        temp_output = out 
     126        if not err == out: 
     127                temp_output += err 
     128 
     129        counter = 0 
     130        output = "" 
     131 
     132        #Make the output fit in the console screen 
     133        for char in temp_output: 
     134                counter += 1 
     135                if char == "\n": 
     136                     counter = 0 
     137                elif counter == 110: 
     138                     output += "\n" 
     139                     counter = 0  
     140                output += char   
     141        return output 
     142 
    112143 
    113144    def handleLoad(self, command): 
     
    167198 
    168199        if result is None: 
    169             result = "Invalid command, enter help for more information" 
     200            result = self.handlePython("python " + command)  
    170201        return result 
Note: See TracChangeset for help on using the changeset viewer.