Mercurial > cpython-lru_cache-weakref
annotate Lib/code.py @ 66978:aed2bbafa550 3.1
Blocked revisions 87324 via svnmerge
........
r87324 | r.david.murray | 2010-12-16 14:08:51 -0500 (Thu, 16 Dec 2010) | 9 lines
#10719: restore messages generated on invalid compileall args
Before the introduction of filename arguments to compileall it gave semi useful
messages about not being able to 'list' names that weren't valid directories.
This fix restores that behavior. In addition to the test for this case, the
patch also adds a test for the default behavior of compileall when no arguments
are provided, and fixes a bug in one of the previously added tests.
........
| author | R. David Murray <rdmurray@bitdance.com> |
|---|---|
| date | Thu, 16 Dec 2010 19:10:16 +0000 |
| parents | f0e9c3d16766 |
| children | 0db67153d25f |
| 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 |
|
6423
644484e1a37b
Add Jeff Epler's interact() function. Note that it is broken.
Guido van Rossum <guido@python.org>
parents:
5835
diff
changeset
|
290 if __name__ == '__main__': |
|
27878
be7683a6f521
- Finally fixed the bug in compile() and exec where a string ending
Guido van Rossum <guido@python.org>
parents:
22830
diff
changeset
|
291 import pdb |
|
be7683a6f521
- Finally fixed the bug in compile() and exec where a string ending
Guido van Rossum <guido@python.org>
parents:
22830
diff
changeset
|
292 pdb.run("interact()\n") |
