annotate Lib/code.py @ 19814:dc87d91d0dfd legacy-trunk

Don't call MacOS.SchedParams() in MachO, it doesn't exist.
author Jack Jansen <jack.jansen@cwi.nl>
date Sun, 09 Sep 2001 00:36:01 +0000
parents d5acff178ad5
children 03f3ab0c7286
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
9441
913eb31b0317 Moved compile_command() to a file of its own (codeop.py).
Guido van Rossum <guido@python.org>
parents: 9405
diff changeset
1 """Utilities needed to emulate Python's interactive interpreter.
9137
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
2
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
3 """
5835
b9063f6f811c Checking in new module code.py -- utilities dealing with code objects.
Guido van Rossum <guido@python.org>
parents:
diff changeset
4
11870
d7eca5b0960a Simple changes by Gerrit Holl - move author acknowledgements out of
Guido van Rossum <guido@python.org>
parents: 9441
diff changeset
5 # Inspired by similar code by Jeff Epler and Fredrik Lundh.
d7eca5b0960a Simple changes by Gerrit Holl - move author acknowledgements out of
Guido van Rossum <guido@python.org>
parents: 9441
diff changeset
6
9441
913eb31b0317 Moved compile_command() to a file of its own (codeop.py).
Guido van Rossum <guido@python.org>
parents: 9405
diff changeset
7
8543
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
8 import sys
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
9 import traceback
19355
d5acff178ad5 A fiddled version of the rest of Michael Hudson's SF patch
Tim Peters <tim.peters@gmail.com>
parents: 17666
diff changeset
10 from codeop import CommandCompiler, compile_command
6423
644484e1a37b Add Jeff Epler's interact() function. Note that it is broken.
Guido van Rossum <guido@python.org>
parents: 5835
diff changeset
11
19355
d5acff178ad5 A fiddled version of the rest of Michael Hudson's SF patch
Tim Peters <tim.peters@gmail.com>
parents: 17666
diff changeset
12 __all__ = ["InteractiveInterpreter", "InteractiveConsole", "interact",
16070
b5345e99596b added __all__ lists to a number of Python modules
Skip Montanaro <skip@pobox.com>
parents: 15887
diff changeset
13 "compile_command"]
b5345e99596b added __all__ lists to a number of Python modules
Skip Montanaro <skip@pobox.com>
parents: 15887
diff changeset
14
15847
679d50705e06 SF Patch #103227 by mwh: make code.py appreciate softspace
Guido van Rossum <guido@python.org>
parents: 15669
diff changeset
15 def softspace(file, newvalue):
679d50705e06 SF Patch #103227 by mwh: make code.py appreciate softspace
Guido van Rossum <guido@python.org>
parents: 15669
diff changeset
16 oldvalue = 0
679d50705e06 SF Patch #103227 by mwh: make code.py appreciate softspace
Guido van Rossum <guido@python.org>
parents: 15669
diff changeset
17 try:
679d50705e06 SF Patch #103227 by mwh: make code.py appreciate softspace
Guido van Rossum <guido@python.org>
parents: 15669
diff changeset
18 oldvalue = file.softspace
679d50705e06 SF Patch #103227 by mwh: make code.py appreciate softspace
Guido van Rossum <guido@python.org>
parents: 15669
diff changeset
19 except AttributeError:
679d50705e06 SF Patch #103227 by mwh: make code.py appreciate softspace
Guido van Rossum <guido@python.org>
parents: 15669
diff changeset
20 pass
679d50705e06 SF Patch #103227 by mwh: make code.py appreciate softspace
Guido van Rossum <guido@python.org>
parents: 15669
diff changeset
21 try:
679d50705e06 SF Patch #103227 by mwh: make code.py appreciate softspace
Guido van Rossum <guido@python.org>
parents: 15669
diff changeset
22 file.softspace = newvalue
679d50705e06 SF Patch #103227 by mwh: make code.py appreciate softspace
Guido van Rossum <guido@python.org>
parents: 15669
diff changeset
23 except TypeError: # "attribute-less object" or "read-only attributes"
679d50705e06 SF Patch #103227 by mwh: make code.py appreciate softspace
Guido van Rossum <guido@python.org>
parents: 15669
diff changeset
24 pass
679d50705e06 SF Patch #103227 by mwh: make code.py appreciate softspace
Guido van Rossum <guido@python.org>
parents: 15669
diff changeset
25 return oldvalue
6423
644484e1a37b Add Jeff Epler's interact() function. Note that it is broken.
Guido van Rossum <guido@python.org>
parents: 5835
diff changeset
26
9137
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
27 class InteractiveInterpreter:
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
28 """Base class for InteractiveConsole.
8543
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
29
9137
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
30 This class deals with parsing and interpreter state (the user's
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
31 namespace); it doesn't deal with input buffering or prompting or
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
32 input file naming (the filename is always passed in explicitly).
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
33
8543
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
34 """
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
35
9137
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
36 def __init__(self, locals=None):
8543
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
37 """Constructor.
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
38
9137
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
39 The optional 'locals' argument specifies the dictionary in
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
40 which code will be executed; it defaults to a newly created
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
41 dictionary with key "__name__" set to "__console__" and key
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
42 "__doc__" set to None.
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
43
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
44 """
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
45 if locals is None:
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
46 locals = {"__name__": "__console__", "__doc__": None}
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
47 self.locals = locals
19355
d5acff178ad5 A fiddled version of the rest of Michael Hudson's SF patch
Tim Peters <tim.peters@gmail.com>
parents: 17666
diff changeset
48 self.compile = CommandCompiler()
9137
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
49
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
50 def runsource(self, source, filename="<input>", symbol="single"):
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
51 """Compile and run some source in the interpreter.
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
52
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
53 Arguments are as for compile_command().
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
54
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
55 One several things can happen:
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
56
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
57 1) The input is incorrect; compile_command() raised an
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
58 exception (SyntaxError or OverflowError). A syntax traceback
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
59 will be printed by calling the showsyntaxerror() method.
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
60
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
61 2) The input is incomplete, and more input is required;
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
62 compile_command() returned None. Nothing happens.
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
63
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
64 3) The input is complete; compile_command() returned a code
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
65 object. The code is executed by calling self.runcode() (which
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
66 also handles run-time exceptions, except for SystemExit).
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
67
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
68 The return value is 1 in case 2, 0 in the other cases (unless
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
69 an exception is raised). The return value can be used to
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
70 decide whether to use sys.ps1 or sys.ps2 to prompt the next
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
71 line.
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
72
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
73 """
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
74 try:
19355
d5acff178ad5 A fiddled version of the rest of Michael Hudson's SF patch
Tim Peters <tim.peters@gmail.com>
parents: 17666
diff changeset
75 code = self.compile(source, filename, symbol)
15887
f83115edf16a mwh@sourceforge found that UnicodeError can be raised by compiling.
Guido van Rossum <guido@python.org>
parents: 15863
diff changeset
76 except (OverflowError, SyntaxError, ValueError):
9137
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
77 # Case 1
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
78 self.showsyntaxerror(filename)
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
79 return 0
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
80
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
81 if code is None:
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
82 # Case 2
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
83 return 1
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
84
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
85 # Case 3
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
86 self.runcode(code)
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
87 return 0
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
88
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
89 def runcode(self, code):
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
90 """Execute a code object.
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
91
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
92 When an exception occurs, self.showtraceback() is called to
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
93 display a traceback. All exceptions are caught except
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
94 SystemExit, which is reraised.
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
95
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
96 A note about KeyboardInterrupt: this exception may occur
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
97 elsewhere in this code, and may not always be caught. The
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
98 caller should be prepared to deal with it.
8543
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
99
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
100 """
9137
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
101 try:
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
102 exec code in self.locals
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
103 except SystemExit:
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
104 raise
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
105 except:
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
106 self.showtraceback()
15847
679d50705e06 SF Patch #103227 by mwh: make code.py appreciate softspace
Guido van Rossum <guido@python.org>
parents: 15669
diff changeset
107 else:
679d50705e06 SF Patch #103227 by mwh: make code.py appreciate softspace
Guido van Rossum <guido@python.org>
parents: 15669
diff changeset
108 if softspace(sys.stdout, 0):
679d50705e06 SF Patch #103227 by mwh: make code.py appreciate softspace
Guido van Rossum <guido@python.org>
parents: 15669
diff changeset
109 print
9137
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
110
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
111 def showsyntaxerror(self, filename=None):
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
112 """Display the syntax error that just occurred.
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
113
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
114 This doesn't display a stack trace because there isn't one.
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
115
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
116 If a filename is given, it is stuffed in the exception instead
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
117 of what was there before (because Python's parser always uses
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
118 "<string>" when reading from a string).
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
119
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
120 The output is written by self.write(), below.
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
121
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
122 """
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
123 type, value, sys.last_traceback = sys.exc_info()
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
124 sys.last_type = type
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
125 sys.last_value = value
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
126 if filename and type is SyntaxError:
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
127 # Work hard to stuff the correct filename in the exception
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
128 try:
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
129 msg, (dummy_filename, lineno, offset, line) = value
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
130 except:
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
131 # Not the format we expect; leave it alone
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
132 pass
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
133 else:
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
134 # Stuff in the right filename
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
135 try:
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
136 # Assume SyntaxError is a class exception
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
137 value = SyntaxError(msg, (filename, lineno, offset, line))
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
138 except:
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
139 # If that failed, assume SyntaxError is a string
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
140 value = msg, (filename, lineno, offset, line)
17666
12c80b570d00 InteractiveInterpreter.showsyntaxerror():
Fred Drake <fdrake@acm.org>
parents: 16495
diff changeset
141 sys.last_value = value
9137
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
142 list = traceback.format_exception_only(type, value)
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
143 map(self.write, list)
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
144
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
145 def showtraceback(self):
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
146 """Display the exception that just occurred.
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
147
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
148 We remove the first stack item because it is our own code.
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
149
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
150 The output is written by self.write(), below.
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
151
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
152 """
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
153 try:
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
154 type, value, tb = sys.exc_info()
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
155 sys.last_type = type
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
156 sys.last_value = value
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
157 sys.last_traceback = tb
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
158 tblist = traceback.extract_tb(tb)
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
159 del tblist[:1]
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
160 list = traceback.format_list(tblist)
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
161 if list:
15669
5c65e676f299 Make Traceback header conform to new traceback ("innermost last" ->
Guido van Rossum <guido@python.org>
parents: 11870
diff changeset
162 list.insert(0, "Traceback (most recent call last):\n")
9137
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
163 list[len(list):] = traceback.format_exception_only(type, value)
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
164 finally:
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
165 tblist = tb = None
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
166 map(self.write, list)
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
167
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
168 def write(self, data):
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
169 """Write a string.
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
170
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
171 The base implementation writes to sys.stderr; a subclass may
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
172 replace this with a different implementation.
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
173
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
174 """
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
175 sys.stderr.write(data)
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
176
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
177
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
178 class InteractiveConsole(InteractiveInterpreter):
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
179 """Closely emulate the behavior of the interactive Python interpreter.
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
180
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
181 This class builds on InteractiveInterpreter and adds prompting
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
182 using the familiar sys.ps1 and sys.ps2, and input buffering.
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
183
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
184 """
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
185
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
186 def __init__(self, locals=None, filename="<console>"):
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
187 """Constructor.
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
188
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
189 The optional locals argument will be passed to the
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
190 InteractiveInterpreter base class.
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
191
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
192 The optional filename argument should specify the (file)name
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
193 of the input stream; it will show up in tracebacks.
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
194
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
195 """
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
196 InteractiveInterpreter.__init__(self, locals)
8543
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
197 self.filename = filename
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
198 self.resetbuffer()
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
199
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
200 def resetbuffer(self):
9137
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
201 """Reset the input buffer."""
8543
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
202 self.buffer = []
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
203
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
204 def interact(self, banner=None):
9137
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
205 """Closely emulate the interactive Python console.
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
206
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
207 The optional banner argument specify the banner to print
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
208 before the first interaction; by default it prints a banner
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
209 similar to the one printed by the real Python interpreter,
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
210 followed by the current class name in parentheses (so as not
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
211 to confuse this with the real interpreter -- since it's so
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
212 close!).
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
213
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
214 """
8543
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
215 try:
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
216 sys.ps1
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
217 except AttributeError:
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
218 sys.ps1 = ">>> "
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
219 try:
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
220 sys.ps2
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
221 except AttributeError:
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
222 sys.ps2 = "... "
15863
71b19d36aafa Make the copyright message the same as for the "real" interpreter.
Guido van Rossum <guido@python.org>
parents: 15847
diff changeset
223 cprt = 'Type "copyright", "credits" or "license" for more information.'
8543
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
224 if banner is None:
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
225 self.write("Python %s on %s\n%s\n(%s)\n" %
15863
71b19d36aafa Make the copyright message the same as for the "real" interpreter.
Guido van Rossum <guido@python.org>
parents: 15847
diff changeset
226 (sys.version, sys.platform, cprt,
8543
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
227 self.__class__.__name__))
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
228 else:
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
229 self.write("%s\n" % str(banner))
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
230 more = 0
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
231 while 1:
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
232 try:
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
233 if more:
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
234 prompt = sys.ps2
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
235 else:
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
236 prompt = sys.ps1
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
237 try:
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
238 line = self.raw_input(prompt)
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
239 except EOFError:
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
240 self.write("\n")
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
241 break
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
242 else:
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
243 more = self.push(line)
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
244 except KeyboardInterrupt:
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
245 self.write("\nKeyboardInterrupt\n")
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
246 self.resetbuffer()
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
247 more = 0
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
248
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
249 def push(self, line):
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
250 """Push a line to the interpreter.
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
251
9137
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
252 The line should not have a trailing newline; it may have
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
253 internal newlines. The line is appended to a buffer and the
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
254 interpreter's runsource() method is called with the
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
255 concatenated contents of the buffer as source. If this
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
256 indicates that the command was executed or invalid, the buffer
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
257 is reset; otherwise, the command is incomplete, and the buffer
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
258 is left as it was after the line was appended. The return
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
259 value is 1 if more input is required, 0 if the line was dealt
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
260 with in some way (this is the same as runsource()).
8543
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
261
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
262 """
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
263 self.buffer.append(line)
16495
69f162dcd8b4 String method conversion.
Eric S. Raymond <esr@thyrsus.com>
parents: 16070
diff changeset
264 source = "\n".join(self.buffer)
9137
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
265 more = self.runsource(source, self.filename)
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
266 if not more:
8543
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
267 self.resetbuffer()
9137
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
268 return more
8543
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
269
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
270 def raw_input(self, prompt=""):
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
271 """Write a prompt and read a line.
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
272
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
273 The returned line does not include the trailing newline.
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
274 When the user enters the EOF key sequence, EOFError is raised.
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
275
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
276 The base implementation uses the built-in function
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
277 raw_input(); a subclass may replace this with a different
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
278 implementation.
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
279
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
280 """
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
281 return raw_input(prompt)
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
282
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
283
9405
3886165dba42 Rename 'locals' argument to top-level interact() function to 'local'
Guido van Rossum <guido@python.org>
parents: 9137
diff changeset
284 def interact(banner=None, readfunc=None, local=None):
8543
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
285 """Closely emulate the interactive Python interpreter.
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
286
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
287 This is a backwards compatible interface to the InteractiveConsole
9137
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
288 class. When readfunc is not specified, it attempts to import the
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
289 readline module to enable GNU readline if it is available.
8543
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
290
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
291 Arguments (all optional, all default to None):
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
292
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
293 banner -- passed to InteractiveConsole.interact()
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
294 readfunc -- if not None, replaces InteractiveConsole.raw_input()
9405
3886165dba42 Rename 'locals' argument to top-level interact() function to 'local'
Guido van Rossum <guido@python.org>
parents: 9137
diff changeset
295 local -- passed to InteractiveInterpreter.__init__()
8543
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
296
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
297 """
9405
3886165dba42 Rename 'locals' argument to top-level interact() function to 'local'
Guido van Rossum <guido@python.org>
parents: 9137
diff changeset
298 console = InteractiveConsole(local)
8543
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
299 if readfunc is not None:
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
300 console.raw_input = readfunc
9137
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
301 else:
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
302 try:
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
303 import readline
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
304 except:
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
305 pass
8543
e951bf2d7d93 Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents: 7755
diff changeset
306 console.interact(banner)
9137
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
307
0329d419e506 Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents: 8543
diff changeset
308
6423
644484e1a37b Add Jeff Epler's interact() function. Note that it is broken.
Guido van Rossum <guido@python.org>
parents: 5835
diff changeset
309 if __name__ == '__main__':
644484e1a37b Add Jeff Epler's interact() function. Note that it is broken.
Guido van Rossum <guido@python.org>
parents: 5835
diff changeset
310 interact()