Show More
@@ -21,8 +21,7 b' from linefrontendbase import LineFrontEndBase, common_prefix' | |||||
21 |
|
21 | |||
22 | from IPython.ipmaker import make_IPython |
|
22 | from IPython.ipmaker import make_IPython | |
23 | from IPython.ipapi import IPApi |
|
23 | from IPython.ipapi import IPApi | |
24 |
from IPython.kernel.core. |
|
24 | from IPython.kernel.core.redirector_output_trap import RedirectorOutputTrap | |
25 | from IPython.kernel.core.output_trap import OutputTrap |
|
|||
26 |
|
25 | |||
27 | from IPython.genutils import Term |
|
26 | from IPython.genutils import Term | |
28 | import pydoc |
|
27 | import pydoc | |
@@ -60,17 +59,9 b' class PrefilterFrontEnd(LineFrontEndBase):' | |||||
60 | # Make sure the raw system call doesn't get called, as we don't |
|
59 | # Make sure the raw system call doesn't get called, as we don't | |
61 | # have a stdin accessible. |
|
60 | # have a stdin accessible. | |
62 | self._ip.system = xterm_system |
|
61 | self._ip.system = xterm_system | |
63 | # Redefine a serie of magics to avoid os.system: |
|
62 | self.shell.output_trap = RedirectorOutputTrap( | |
64 | # FIXME: I am redefining way too much magics. |
|
63 | out_callback=self.write, | |
65 | for alias_name, (_, alias_value) in \ |
|
64 | err_callback=self.write, | |
66 | _ip.IP.shell.alias_table.iteritems(): |
|
|||
67 | magic = lambda s : _ip.magic('sx %s %s' % (alias_value, s)) |
|
|||
68 | setattr(_ip.IP, 'magic_%s' % alias_name, magic) |
|
|||
69 | # FIXME: I should create a real file-like object dedicated to this |
|
|||
70 | # terminal |
|
|||
71 | self.shell.output_trap = OutputTrap( |
|
|||
72 | out=FileLike(write_callback=self.write), |
|
|||
73 | err=FileLike(write_callback=self.write), |
|
|||
74 | ) |
|
65 | ) | |
75 | # Capture and release the outputs, to make sure all the |
|
66 | # Capture and release the outputs, to make sure all the | |
76 | # shadow variables are set |
|
67 | # shadow variables are set |
@@ -59,7 +59,10 b' class RedirectorOutputTrap(OutputTrap):' | |||||
59 | redirectors. |
|
59 | redirectors. | |
60 | """ |
|
60 | """ | |
61 | OutputTrap.unset(self) |
|
61 | OutputTrap.unset(self) | |
|
62 | # Flush the redirectors before stopping them | |||
|
63 | self.on_out_write('') | |||
62 | self.err_redirector.stop() |
|
64 | self.err_redirector.stop() | |
|
65 | self.on_err_write('') | |||
63 | self.out_redirector.stop() |
|
66 | self.out_redirector.stop() | |
64 |
|
67 | |||
65 |
|
68 | |||
@@ -69,11 +72,22 b' class RedirectorOutputTrap(OutputTrap):' | |||||
69 | def on_out_write(self, string): |
|
72 | def on_out_write(self, string): | |
70 | """ Callback called when there is some Python output on stdout. |
|
73 | """ Callback called when there is some Python output on stdout. | |
71 | """ |
|
74 | """ | |
72 | self.out_callback(self.out_redirector.getvalue() + string) |
|
75 | try: | |
|
76 | self.out_callback(self.out_redirector.getvalue() + string) | |||
|
77 | except: | |||
|
78 | # If tracebacks are happening and we can't see them, it is | |||
|
79 | # quasy impossible to debug | |||
|
80 | self.unset() | |||
|
81 | raise | |||
73 |
|
82 | |||
74 | def on_err_write(self, string): |
|
83 | def on_err_write(self, string): | |
75 | """ Callback called when there is some Python output on stderr. |
|
84 | """ Callback called when there is some Python output on stderr. | |
76 | """ |
|
85 | """ | |
77 | self.err_callback(self.err_redirector.getvalue() + string) |
|
86 | try: | |
78 |
|
87 | self.err_callback(self.err_redirector.getvalue() + string) | ||
|
88 | except: | |||
|
89 | # If tracebacks are happening and we can't see them, it is | |||
|
90 | # quasy impossible to debug | |||
|
91 | self.unset() | |||
|
92 | raise | |||
79 |
|
93 |
General Comments 0
You need to be logged in to leave comments.
Login now