]>
git.saurik.com Git - wxWidgets.git/blob - wxPython/wx/py/interpreter.py
1 """Interpreter executes Python commands."""
3 __author__
= "Patrick K. O'Brien <pobrien@orbtech.com>"
5 __revision__
= "$Revision$"[11:-2]
9 from code
import InteractiveInterpreter
14 class Interpreter(InteractiveInterpreter
):
15 """Interpreter based on code.InteractiveInterpreter."""
17 revision
= __revision__
19 def __init__(self
, locals=None, rawin
=None,
20 stdin
=sys
.stdin
, stdout
=sys
.stdout
, stderr
=sys
.stderr
):
21 """Create an interactive interpreter object."""
22 InteractiveInterpreter
.__init
__(self
, locals=locals)
28 __builtin__
.raw_input = rawin
30 copyright
= 'Type "help", "copyright", "credits" or "license"'
31 copyright
+= ' for more information.'
32 self
.introText
= 'Python %s on %s%s%s' % \
33 (sys
.version
, sys
.platform
, os
.linesep
, copyright
)
36 except AttributeError:
40 except AttributeError:
43 # List of lists to support recursive push().
44 self
.commandBuffer
= []
45 self
.startupScript
= os
.environ
.get('PYTHONSTARTUP')
47 def push(self
, command
):
48 """Send command to the interpreter to be executed.
50 Because this may be called recursively, we append a new list
51 onto the commandBuffer list and then append commands into
52 that. If the passed in command is part of a multi-line
53 command we keep appending the pieces to the last list in
54 commandBuffer until we have a complete command. If not, we
55 delete that last list."""
57 # In case the command is unicode try encoding it
58 if type(command
) == unicode:
60 command
= command
.encode(wx
.GetDefaultPyEncoding())
61 except UnicodeEncodeError:
62 pass # otherwise leave it alone
65 try: del self
.commandBuffer
[-1]
66 except IndexError: pass
67 if not self
.more
: self
.commandBuffer
.append([])
68 self
.commandBuffer
[-1].append(command
)
69 source
= '\n'.join(self
.commandBuffer
[-1])
70 more
= self
.more
= self
.runsource(source
)
71 dispatcher
.send(signal
='Interpreter.push', sender
=self
,
72 command
=command
, more
=more
, source
=source
)
75 def runsource(self
, source
):
76 """Compile and run source code in the interpreter."""
77 stdin
, stdout
, stderr
= sys
.stdin
, sys
.stdout
, sys
.stderr
78 sys
.stdin
, sys
.stdout
, sys
.stderr
= \
79 self
.stdin
, self
.stdout
, self
.stderr
80 more
= InteractiveInterpreter
.runsource(self
, source
)
81 # If sys.std* is still what we set it to, then restore it.
82 # But, if the executed source changed sys.std*, assume it was
83 # meant to be changed and leave it. Power to the people.
84 if sys
.stdin
== self
.stdin
:
86 if sys
.stdout
== self
.stdout
:
88 if sys
.stderr
== self
.stderr
:
92 def getAutoCompleteKeys(self
):
93 """Return list of auto-completion keycodes."""
96 def getAutoCompleteList(self
, command
='', *args
, **kwds
):
97 """Return list of auto-completion options for a command.
99 The list of options will be based on the locals namespace."""
100 stdin
, stdout
, stderr
= sys
.stdin
, sys
.stdout
, sys
.stderr
101 sys
.stdin
, sys
.stdout
, sys
.stderr
= \
102 self
.stdin
, self
.stdout
, self
.stderr
103 l
= introspect
.getAutoCompleteList(command
, self
.locals,
105 sys
.stdin
, sys
.stdout
, sys
.stderr
= stdin
, stdout
, stderr
108 def getCallTip(self
, command
='', *args
, **kwds
):
109 """Return call tip text for a command.
111 Call tip information will be based on the locals namespace."""
112 return introspect
.getCallTip(command
, self
.locals, *args
, **kwds
)
115 class InterpreterAlaCarte(Interpreter
):
116 """Demo Interpreter."""
118 def __init__(self
, locals, rawin
, stdin
, stdout
, stderr
,
119 ps1
='main prompt', ps2
='continuation prompt'):
120 """Create an interactive interpreter object."""
121 Interpreter
.__init
__(self
, locals=locals, rawin
=rawin
,
122 stdin
=stdin
, stdout
=stdout
, stderr
=stderr
)