Я хочу разработать простой терминал на базе Qt Python 3, например, например. Python IDLE Я использую QTextEdit в качестве терминала. Я хочу, чтобы программа была легкой, поэтому я не хочу использовать / загружать модуль IPython (jupyter).
Для выполнения команд в основном я делаю:
from code import InteractiveInterpreter
from contextlib import redirect_stdout, redirect_stderr
import io
interpreter = InteractiveInterpreter()
command_string = '1+1'
out_io = io.StringIO()
err_io = io.StringIO()
with redirect_stdout(out_io), redirect_stderr(err_io):
interpreter.runsource(command_string)
output = out_io.getvalue()
error = err_io.getvalue()
print('output:',output)
Это прекрасно работает с командами, которые не требуют ввода пользователя, но я застрял с такими командами, как ввод ('что-то'), справка () и т. Д. В этих случаях интерпретатор останавливает выполнение и ожидает ввода данных пользователем в терминале. , Но моя программа, которая должна обеспечивать ввод от QTextEdit, не знает об этом.
1) Как я могу определить, что интерпретатор ожидает ввода пользователя во время выполнения?
2) Как в этом случае программно передать ввод пользователя в интерпретатор, чтобы он мог продолжить выполнение?