私自身のPythonコードエディタと端末を作成して、それを既存のプログラムに実装してスクライブ可能性を追加しています。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