Mercurial > cpython-lru_cache-weakref
annotate Lib/code.py @ 57685:2fdcd73c32aa
Merged revisions 76785 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r76785 | benjamin.peterson | 2009-12-13 08:18:08 -0600 (Sun, 13 Dec 2009) | 1 line
add 2.6.x point releases
........
| author | Benjamin Peterson <benjamin@python.org> |
|---|---|
| date | Sun, 13 Dec 2009 14:21:46 +0000 |
| parents | 0db67153d25f |
| children | a812de69b493 |
| 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 |
|
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
|
15 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
|
16 """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
|
17 |
|
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
|
18 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
|
19 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
|
20 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
|
21 |
|
8543
e951bf2d7d93
Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents:
7755
diff
changeset
|
22 """ |
|
e951bf2d7d93
Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents:
7755
diff
changeset
|
23 |
|
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
|
24 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
|
25 """Constructor. |
|
e951bf2d7d93
Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents:
7755
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 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
|
28 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
|
29 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
|
30 "__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
|
31 |
|
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 """ |
|
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 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
|
34 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
|
35 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
|
36 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
|
37 |
|
0329d419e506
Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents:
8543
diff
changeset
|
38 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
|
39 """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
|
40 |
|
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 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
|
42 |
|
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 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
|
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 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
|
46 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
|
47 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
|
48 |
|
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 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
|
50 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
|
51 |
|
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 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
|
53 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
|
54 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
|
55 |
|
22830
a9dd5e6d6805
Convert a pile of obvious "yes/no" functions to return bool.
Tim Peters <tim.peters@gmail.com>
parents:
22566
diff
changeset
|
56 The return value is True in case 2, False in the other cases (unless |
|
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
|
57 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
|
58 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
|
59 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
|
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 """ |
|
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 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
|
63 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
|
64 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
|
65 # 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
|
66 self.showsyntaxerror(filename) |
|
22830
a9dd5e6d6805
Convert a pile of obvious "yes/no" functions to return bool.
Tim Peters <tim.peters@gmail.com>
parents:
22566
diff
changeset
|
67 return False |
|
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
|
68 |
|
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 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
|
70 # Case 2 |
|
22830
a9dd5e6d6805
Convert a pile of obvious "yes/no" functions to return bool.
Tim Peters <tim.peters@gmail.com>
parents:
22566
diff
changeset
|
71 return True |
|
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
|
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 # 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
|
74 self.runcode(code) |
|
22830
a9dd5e6d6805
Convert a pile of obvious "yes/no" functions to return bool.
Tim Peters <tim.peters@gmail.com>
parents:
22566
diff
changeset
|
75 return False |
|
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
|
76 |
|
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 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
|
78 """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
|
79 |
|
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 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
|
81 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
|
82 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
|
83 |
|
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 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
|
85 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
|
86 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
|
87 |
|
e951bf2d7d93
Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents:
7755
diff
changeset
|
88 """ |
|
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
|
89 try: |
|
39782
c94f37054f19
Patch #1550800: make exec a function.
Georg Brandl <georg@python.org>
parents:
37045
diff
changeset
|
90 exec(code, self.locals) |
|
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
|
91 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
|
92 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
|
93 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 self.showtraceback() |
|
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 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
|
97 """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
|
98 |
|
0329d419e506
Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents:
8543
diff
changeset
|
99 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
|
100 |
|
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 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
|
102 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
|
103 "<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
|
104 |
|
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 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
|
106 |
|
0329d419e506
Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents:
8543
diff
changeset
|
107 """ |
|
0329d419e506
Reworked it quite a bit. There are now two classes: a base class,
Guido van Rossum <guido@python.org>
parents:
8543
diff
changeset
|
108 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
|
109 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
|
110 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
|
111 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
|
112 # 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
|
113 try: |
|
42455
dd74e020a132
Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40799
diff
changeset
|
114 msg, (dummy_filename, lineno, offset, line) = value.args |
|
dd74e020a132
Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40799
diff
changeset
|
115 except 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
|
116 # 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
|
117 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
|
118 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
|
119 # Stuff in the right filename |
|
22565
906ad36cb7bc
remove unqualified excepts - catch ImportError when trying to import
Skip Montanaro <skip@pobox.com>
parents:
19959
diff
changeset
|
120 value = SyntaxError(msg, (filename, lineno, offset, line)) |
|
17666
12c80b570d00
InteractiveInterpreter.showsyntaxerror():
Fred Drake <fdrake@acm.org>
parents:
16495
diff
changeset
|
121 sys.last_value = value |
|
42455
dd74e020a132
Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40799
diff
changeset
|
122 lines = traceback.format_exception_only(type, value) |
|
dd74e020a132
Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40799
diff
changeset
|
123 self.write(''.join(lines)) |
|
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
|
124 |
|
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 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
|
126 """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
|
127 |
|
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 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
|
129 |
|
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 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
|
131 |
|
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 """ |
|
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 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
|
134 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
|
135 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
|
136 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
|
137 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
|
138 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
|
139 del tblist[:1] |
|
42455
dd74e020a132
Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40799
diff
changeset
|
140 lines = traceback.format_list(tblist) |
|
dd74e020a132
Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40799
diff
changeset
|
141 if lines: |
|
dd74e020a132
Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40799
diff
changeset
|
142 lines.insert(0, "Traceback (most recent call last):\n") |
|
dd74e020a132
Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40799
diff
changeset
|
143 lines.extend(traceback.format_exception_only(type, 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
|
144 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
|
145 tblist = tb = None |
|
42455
dd74e020a132
Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40799
diff
changeset
|
146 self.write(''.join(lines)) |
|
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
|
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 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
|
149 """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
|
150 |
|
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 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
|
152 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
|
153 |
|
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 """ |
|
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.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
|
156 |
|
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 |
|
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 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
|
159 """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
|
160 |
|
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 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
|
162 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
|
163 |
|
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 """ |
|
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 |
|
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 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
|
167 """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
|
168 |
|
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 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
|
170 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
|
171 |
|
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 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
|
173 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
|
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 """ |
|
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 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
|
177 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
|
178 self.resetbuffer() |
|
e951bf2d7d93
Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents:
7755
diff
changeset
|
179 |
|
e951bf2d7d93
Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents:
7755
diff
changeset
|
180 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
|
181 """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
|
182 self.buffer = [] |
|
e951bf2d7d93
Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents:
7755
diff
changeset
|
183 |
|
e951bf2d7d93
Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents:
7755
diff
changeset
|
184 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
|
185 """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
|
186 |
|
42455
dd74e020a132
Merged revisions 56492-56752 via svnmerge from
Guido van Rossum <guido@python.org>
parents:
40799
diff
changeset
|
187 The optional banner argument specifies the banner to 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
|
188 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
|
189 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
|
190 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
|
191 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
|
192 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
|
193 |
|
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 """ |
|
8543
e951bf2d7d93
Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents:
7755
diff
changeset
|
195 try: |
|
e951bf2d7d93
Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents:
7755
diff
changeset
|
196 sys.ps1 |
|
e951bf2d7d93
Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents:
7755
diff
changeset
|
197 except AttributeError: |
|
e951bf2d7d93
Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents:
7755
diff
changeset
|
198 sys.ps1 = ">>> " |
|
e951bf2d7d93
Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents:
7755
diff
changeset
|
199 try: |
|
e951bf2d7d93
Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents:
7755
diff
changeset
|
200 sys.ps2 |
|
e951bf2d7d93
Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents:
7755
diff
changeset
|
201 except AttributeError: |
|
e951bf2d7d93
Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents:
7755
diff
changeset
|
202 sys.ps2 = "... " |
|
22566
39e42d6f5da2
make default banner match what the real interpreter displays
Skip Montanaro <skip@pobox.com>
parents:
22565
diff
changeset
|
203 cprt = 'Type "help", "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
|
204 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
|
205 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
|
206 (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
|
207 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
|
208 else: |
|
e951bf2d7d93
Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents:
7755
diff
changeset
|
209 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
|
210 more = 0 |
|
e951bf2d7d93
Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents:
7755
diff
changeset
|
211 while 1: |
|
e951bf2d7d93
Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents:
7755
diff
changeset
|
212 try: |
|
e951bf2d7d93
Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents:
7755
diff
changeset
|
213 if more: |
|
e951bf2d7d93
Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents:
7755
diff
changeset
|
214 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
|
215 else: |
|
e951bf2d7d93
Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents:
7755
diff
changeset
|
216 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
|
217 try: |
|
e951bf2d7d93
Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents:
7755
diff
changeset
|
218 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
|
219 except EOFError: |
|
e951bf2d7d93
Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents:
7755
diff
changeset
|
220 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
|
221 break |
|
e951bf2d7d93
Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents:
7755
diff
changeset
|
222 else: |
|
e951bf2d7d93
Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents:
7755
diff
changeset
|
223 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
|
224 except KeyboardInterrupt: |
|
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("\nKeyboardInterrupt\n") |
|
e951bf2d7d93
Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents:
7755
diff
changeset
|
226 self.resetbuffer() |
|
e951bf2d7d93
Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents:
7755
diff
changeset
|
227 more = 0 |
|
e951bf2d7d93
Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents:
7755
diff
changeset
|
228 |
|
e951bf2d7d93
Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents:
7755
diff
changeset
|
229 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
|
230 """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
|
231 |
|
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
|
232 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
|
233 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
|
234 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
|
235 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
|
236 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
|
237 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
|
238 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
|
239 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
|
240 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
|
241 |
|
e951bf2d7d93
Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents:
7755
diff
changeset
|
242 """ |
|
e951bf2d7d93
Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents:
7755
diff
changeset
|
243 self.buffer.append(line) |
|
16495
69f162dcd8b4
String method conversion.
Eric S. Raymond <esr@thyrsus.com>
parents:
16070
diff
changeset
|
244 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
|
245 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
|
246 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
|
247 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
|
248 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
|
249 |
|
e951bf2d7d93
Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents:
7755
diff
changeset
|
250 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
|
251 """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
|
252 |
|
e951bf2d7d93
Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents:
7755
diff
changeset
|
253 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
|
254 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
|
255 |
|
44421
f0e9c3d16766
Fix issue #1707. When raw_input() was removed, it was incorrectly replaced
Guido van Rossum <guido@python.org>
parents:
42455
diff
changeset
|
256 The base implementation uses the built-in function |
|
f0e9c3d16766
Fix issue #1707. When raw_input() was removed, it was incorrectly replaced
Guido van Rossum <guido@python.org>
parents:
42455
diff
changeset
|
257 input(); a subclass may replace this with a different |
|
f0e9c3d16766
Fix issue #1707. When raw_input() was removed, it was incorrectly replaced
Guido van Rossum <guido@python.org>
parents:
42455
diff
changeset
|
258 implementation. |
|
8543
e951bf2d7d93
Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents:
7755
diff
changeset
|
259 |
|
e951bf2d7d93
Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents:
7755
diff
changeset
|
260 """ |
|
44421
f0e9c3d16766
Fix issue #1707. When raw_input() was removed, it was incorrectly replaced
Guido van Rossum <guido@python.org>
parents:
42455
diff
changeset
|
261 return input(prompt) |
|
37045
081b4f0e81b7
Get rid of a bunch more raw_input references
Neal Norwitz <nnorwitz@gmail.com>
parents:
27878
diff
changeset
|
262 |
|
8543
e951bf2d7d93
Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents:
7755
diff
changeset
|
263 |
|
e951bf2d7d93
Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents:
7755
diff
changeset
|
264 |
|
9405
3886165dba42
Rename 'locals' argument to top-level interact() function to 'local'
Guido van Rossum <guido@python.org>
parents:
9137
diff
changeset
|
265 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
|
266 """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
|
267 |
|
e951bf2d7d93
Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents:
7755
diff
changeset
|
268 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
|
269 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
|
270 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
|
271 |
|
e951bf2d7d93
Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents:
7755
diff
changeset
|
272 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
|
273 |
|
e951bf2d7d93
Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents:
7755
diff
changeset
|
274 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
|
275 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
|
276 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
|
277 |
|
e951bf2d7d93
Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents:
7755
diff
changeset
|
278 """ |
|
9405
3886165dba42
Rename 'locals' argument to top-level interact() function to 'local'
Guido van Rossum <guido@python.org>
parents:
9137
diff
changeset
|
279 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
|
280 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
|
281 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
|
282 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
|
283 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
|
284 import readline |
|
22565
906ad36cb7bc
remove unqualified excepts - catch ImportError when trying to import
Skip Montanaro <skip@pobox.com>
parents:
19959
diff
changeset
|
285 except ImportError: |
|
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
|
286 pass |
|
8543
e951bf2d7d93
Subsume the interact() function in a class. This should make it
Guido van Rossum <guido@python.org>
parents:
7755
diff
changeset
|
287 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
|
288 |
|
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 |
|
57450
0db67153d25f
Merged revisions 75264,75268,75293,75318,75391-75392,75436,75478,75971,76003,76058,76140-76141,76231,76380,76428-76429 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
44421
diff
changeset
|
290 if __name__ == "__main__": |
|
0db67153d25f
Merged revisions 75264,75268,75293,75318,75391-75392,75436,75478,75971,76003,76058,76140-76141,76231,76380,76428-76429 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents:
44421
diff
changeset
|
291 interact() |
