我正在编写我自己的python代码编辑器和终端以获得乐趣,并在现有程序中实现它以添加scribtability。中止评估python的交互式控制台
现在我发现,我不知道该怎么一旦停止运行代码的评价问题。这怎么可能完成?
这是我实现:
import code
import contextlib
import sys
from io import StringIO
import copy
@contextlib.contextmanager
def capture():
oldout,olderr = sys.stdout, sys.stderr
try:
out=[StringIO(), StringIO()]
sys.stdout,sys.stderr = out
yield out
finally:
sys.stdout,sys.stderr = oldout, olderr
out[0] = out[0].getvalue()
out[1] = out[1].getvalue()
class PythonTerminal(code.InteractiveConsole):
def __init__(self, shared_vars):
self.shared_vars_start = copy.deepcopy(shared_vars)
self.shared_vars = shared_vars
super().__init__(shared_vars)
self.out_history = []
def run_code(self,code_string):
with capture() as out:
self.runcode(code_string)
self.out_history.append(out)
return out
def restart_interpreter(self):
self.__init__(self.shared_vars_start)
def stop(self):
raise NotImplementedError
if __name__ == '__main__':
a = range(10)
PyTerm = PythonTerminal({'Betrag': a})
test_code = """
for i in range(10000):
for j in range(1000):
temp = i*j
print('Finished'+str(i))
"""
print('Starting')
t = threading.Thread(target=PyTerm.run_code,args=(test_code,))
t.start()
PyTerm.stop()
t.join()
print(PyTerm.out_history[-1]) # This line should be executed immediately and contain an InterruptError
的目标是,评估停止,但该解释还活着,所以像CTRL + C。
而不是图像,你可以包含'resetbuffer'和'push'文本吗?图像难以搜索并且不适用于屏幕阅读器,例如为盲人。谢谢! – darthbith
感谢您的回答,但它并不能真正解决我的问题,因为代码的运行评估不会被restbuffer中断。我将编辑我的答案以显示原因。 – Jannick