replwrap _expect_prompt broken: line undefined
dekuenstle opened this issue · comments
David-Elias Künstle commented
Hi,
the line
variable in the replwrap.REPLWrapper._expect_prompt
method is not defined in the latest version of metakernel.
This results in NameError exceptions, e.g. using oct2py.
Cheers
David
David-Elias Künstle commented
Some more detail:
Metakernel 0.24.3, Oct2Py 5.0.4, Python 3.8
Minimal example:
from oct2py import octave
import numpy as np
octave.addpath(octave.genpath('/path/to/library'))
x = np.arange(19)
octave.libraryfunction(x)
Stacktrace:
~/.local/lib/python3.8/site-packages/oct2py/core.py in feval(self, func_path, *func_args, **kwargs)
356 height=kwargs.get('plot_height'),
357 resolution=kwargs.get('plot_res'))
--> 358 self._engine.plot_settings = settings
359
360 dname = osp.dirname(func_path)
~/.local/lib/python3.8/site-packages/octave_kernel/kernel.py in plot_settings(self, settings)
217 cmds.append("graphics_toolkit('%s');" % self._default_toolkit)
218
--> 219 self.eval('\n'.join(cmds))
220
221 def eval(self, code, timeout=None, silent=False):
~/.local/lib/python3.8/site-packages/octave_kernel/kernel.py in eval(self, code, timeout, silent)
244 self.error_handler(e)
245 else:
--> 246 raise e
247
248 def make_figures(self, plot_dir=None):
~/.local/lib/python3.8/site-packages/octave_kernel/kernel.py in eval(self, code, timeout, silent)
229 self.logger.debug(code)
230 try:
--> 231 resp = self.repl.run_command(code.rstrip(),
232 timeout=timeout,
233 stream_handler=stream_handler,
~/.local/lib/python3.8/site-packages/metakernel/replwrap.py in run_command(self, command, timeout, stream_handler, line_handler, stdin_handler)
242 for line in cmdlines[1:]:
243 if not self.prompt_emit_cmd:
--> 244 self._expect_prompt(timeout=timeout)
245 res.append(self.child.before)
246 self.sendline(line)
~/.local/lib/python3.8/site-packages/metakernel/replwrap.py in _expect_prompt(self, timeout)
145 raise ValueError('Stdin Requested but not stdin handler available')
146
--> 147 resp = self._stdin_handler(line + self.child.after)
148 self.sendline(resp)
149 # got a newline
NameError: name 'line' is not defined
Steven Silvester commented
The original code was:
line = stdin_handler(self.child.after)
self.sendline(line)
I think that's what it should be changed back to. Mind trying it and submitting a PR?