Python, Tkinter, встроить интерактивную консоль и перенаправить стандартный вывод

В настоящее время на моем рабочем месте мне нужно создать графический интерфейс благодаря Tkinter. В этом графическом интерфейсе я должен встроить консоль, эта консоль должна быть интерактивной, то есть stdout и stderr будут отображаться в этой консоли, и пользователь может ввести команду.

В моем первом исследовании я думаю, что xterm может быть полезен, но я не нашел, как мы можем перенаправить на него stdout и stderr.

Спасибо


person Félix Arnoult    schedule 04.05.2016    source источник
comment
Прочтите еще раз документацию модуля подпроцесса, в ней объясняется, как перенаправить стандартные потоки в подпроцесс.   -  person Serge Ballesta    schedule 04.05.2016
comment
Я думаю, что subprocess.Popen(["xterm"], stdout =PIPE, stderr=PIPE, stdin=PIPE) — это начало, но оно не работает. Английский не мой родной язык, и, конечно, вся документация на английском, поэтому я, конечно, скучаю по ответу.   -  person Félix Arnoult    schedule 04.05.2016
comment
Дубликат stackoverflow.com/questions/7253448/. Другой дубликат (с ответом): stackoverflow.com/questions/36929911/. Я искал [tkinter] embed console   -  person Terry Jan Reedy    schedule 04.05.2016
comment
Спасибо, прежде чем я написал этот пост, я проверил в Интернете и нашел эти сообщения, решение, которое предлагает сделать терминал, но вывод не перенаправляется imgur.com/HQpzEWD   -  person Félix Arnoult    schedule 09.05.2016


Ответы (1)


Вы должны начать с анализа того, что вы ожидаете:

  • ввод от пользователя: что вы хотите, как вы хотите это обработать? (это действительно ввод оболочки?)
  • обратная связь: что вы хотите отобразить, как это производится? (прямой вывод оболочки?)

xterm — это просто графический интерфейс вокруг оболочки. Это означает, что он захватывает ввод с клавиатуры, поступающий в его окно, отправляет его в shell и, в свою очередь, отображает его shell stdout и stderr в окне с учетом кода форматирования. (не для терминала vt220 + цветовые коды ANSI). Необычно использовать xterm в графическом интерфейсе.

Оболочка может быть любой программой командной строки, которая обрабатывает стандартный ввод и использует стандартный вывод и стандартные потоки ошибок. Обычно это /bin/sh или bin/bash, но может быть и любая программа.

Если вы действительно хотите это сделать, вы можете запустить xterm в подпроцессе со специальной оболочкой, которая передает все входные строки вашей основной программе, например, через сокет домена Unix, и, в свою очередь, возвращает то, что ваша основная программа отправляет ему.

Чаще всего графические интерфейсы используют текстовый виджет для получения ввода от пользователя и другой или тот же виджет для отображения обратной связи. Пока вы не проанализируете вещи на этом уровне и не спроектируете глобальную архитектуру, пожалуйста, не думайте слишком много о синтаксисе модуля подпроцесса.

person Serge Ballesta    schedule 04.05.2016