Я пытаюсь сделать что-то под управлением графического интерфейса Python Shell.
Единственное, я не знаю, как сделать весь этот ввод / вывод. Я просто хочу иметь возможность вводить ввод, выполнять команду python и выдавать вывод команды python. Я знаю, что IDLE сделан в Tkinter, поэтому он использует виджеты?
Это буквально просто «ввод типа, вывод вывода».
Я попытался найти его, но похоже, что большинство результатов связано с командной строкой, а это не то, что я ищу. Единственный другой вопрос, который был точно таким же, как у меня, был не то, что я имел в виду. Я также попытался найти исходный код для IDLE, но не смог найти то, что искал.
Я нашел несколько ответов, которые работают для Linux, но я на Windows 10 ...
Мне нужно, чтобы «оболочка» была в Tkinter, потому что на одной стороне экрана будет что-то еще, что связано с выходами команды.
Кто-нибудь знает виджеты, используемые для создания очень простой оболочки Python?
источник
Ответы:
Простая оболочка Python / терминал / командная строка
type input
,show output
" вещь. ************************Приведенный выше скрипт Python имеет следующую иерархию, как указано;
Процедура:
Основной рабочий процесс для приведенного выше кода приведен ниже;
def welcome_note():...
Включает метку, которая будет отображаться за пределами текста.def get_text(self):...
Выполняет две операции; ** Получить текст из основного текста ** & ** Установить вывод в поле ввода **.def store_commands(self, command):...
Используйте для сохранения переменной в файл.def get_stored_commands(self):
... Получить переменную, хранящуюся в файле.def check_if_file_empty():
... Проверьте размер файла.def run_commands(self, command):...
Этот метод действует как компилятор Python, который принимает команды, выполняет обработку и выдает выходные данные для данной команды. Для запуска команд я бы рекомендовал их использовать,subprocess-module
поскольку он предоставляет более мощные средства для порождения новых процессов и получения их результатов; Для запуска оконных команд с использованием Python входят различные встроенные библиотеки, такие как;1. ОС ( подробно ), 2. подпроцесс ( подробно ) и т. Д.
Чтобы узнать, что лучше использовать, перейдите по ссылке: подпроцесс-модуль предпочтительнее, чем ос-модуль .
def start_terminal(self):...
Этот метод просто включает в себя функциональность для запускаtkinter
окна сеанса и отображения базовой компоновки для окна ввода и вывода.Workaroud:
Это просто
tkinter GUI based python shell
выполнить простую функциональность, как Windows-командной строки. Чтобы запустить команды Pythondirectly
в командной строке, не переходя в терминал Python, мы делаем просто как;Его результат будет прост как;
Точно так же, чтобы запустить более одной строки одновременно, как указано;
Его вывод будет как;
Итак, чтобы использовать это
tkinter python shell
;Либо вы можете разместить команду как;
или вот так;
или просто встроенная команда как
Вы получите тот же результат.
источник
input
,output
оболочка. Это действует как основнойpython kernel
. Действует только тот, который помещен в текстовое тело . Я не установил буфер или кэш-память для хранения истории переменных. Позвольте мне сначала проверить это требование в этом IDLE!Это простая оболочка, в основном используемая
exec()
для выполнения операторов python иsubprocess.Popen()
выполнения внешней команды:Просто введите нормальный оператор python:
Или введите команду оболочки:
Вы также можете использовать
Up
клавишу для вызова последней команды.Обратите внимание, что если вы выполните системную команду, требующую ввода данных пользователем, оболочка остановится на 5 секунд (время ожидания используется в
communicate()
).Вы можете изменить
on_key()
функцию в соответствии с вашими потребностями.Также помните, что использование
exec()
не является хорошей практикой.источник
Я реализовал оболочку Python, используя
code.InteractiveConsole
команды для проекта. Ниже приведена упрощенная версия, хотя она все еще довольно длинная, потому что я написал привязки для специальных клавиш (таких как Return, Tab ...), которые ведут себя как в консоли python. Можно добавить дополнительные функции, такие как автозаполнение с помощью джедаев и выделение синтаксиса с помощью фрагментов.Основная идея заключается в том, что я использую
push()
методcode.InteractiveConsole
для выполнения команд. Этот метод возвращает,True
если это частичная команда, напримерdef test(x):
, и я использую эту обратную связь для вставки...
подсказки, в противном случае выводится на экран и отображается новая>>>
подсказка. Я фиксирую вывод, используяcontextlib.redirect_stdout
.Также есть много кода, включающего метки и сравниваемые индексы, потому что я не даю пользователю вставлять текст в ранее выполненные команды. Идея заключается в том, что я создал пометку «вход», которая сообщает мне, где находится начало активной подсказки, и
self.compare('insert', '<', 'input')
я могу знать, когда пользователь пытается вставить текст над активной подсказкой.источник