Вы должны начать с анализа того, что вы ожидаете:
- ввод от пользователя: что вы хотите, как вы хотите это обработать? (это действительно ввод оболочки?)
- обратная связь: что вы хотите отобразить, как это производится? (прямой вывод оболочки?)
xterm — это просто графический интерфейс вокруг оболочки. Это означает, что он захватывает ввод с клавиатуры, поступающий в его окно, отправляет его в shell и, в свою очередь, отображает его shell stdout и stderr в окне с учетом кода форматирования. (не для терминала vt220 + цветовые коды ANSI). Необычно использовать xterm в графическом интерфейсе.
Оболочка может быть любой программой командной строки, которая обрабатывает стандартный ввод и использует стандартный вывод и стандартные потоки ошибок. Обычно это /bin/sh
или bin/bash
, но может быть и любая программа.
Если вы действительно хотите это сделать, вы можете запустить xterm в подпроцессе со специальной оболочкой, которая передает все входные строки вашей основной программе, например, через сокет домена Unix, и, в свою очередь, возвращает то, что ваша основная программа отправляет ему.
Чаще всего графические интерфейсы используют текстовый виджет для получения ввода от пользователя и другой или тот же виджет для отображения обратной связи. Пока вы не проанализируете вещи на этом уровне и не спроектируете глобальную архитектуру, пожалуйста, не думайте слишком много о синтаксисе модуля подпроцесса.
person
Serge Ballesta
schedule
04.05.2016
subprocess.Popen(["xterm"], stdout =PIPE, stderr=PIPE, stdin=PIPE)
— это начало, но оно не работает. Английский не мой родной язык, и, конечно, вся документация на английском, поэтому я, конечно, скучаю по ответу. - person Félix Arnoult   schedule 04.05.2016[tkinter] embed console
- person Terry Jan Reedy   schedule 04.05.2016