Estou tentando fazer algo controlado por uma GUI do Python Shell.
A única coisa é que eu não sei como fazer essa coisa toda de entrada / saída. Eu só quero poder digitar uma entrada, executar o comando python e fornecer a saída do comando python. Eu sei que o IDLE é feito no Tkinter, então ele usa os widgets?
É literalmente apenas uma coisa "digitar entrada, mostrar saída".
Eu tentei pesquisar, mas parece que a maioria dos resultados tem a ver com a linha de comando, que não é o que estou procurando. A única outra pergunta que era exatamente igual à minha também não era o que eu tinha em mente. Eu também tentei localizar o código fonte do IDLE, mas não consegui encontrar o que estava procurando.
Encontrei algumas respostas que funcionam no Linux, mas estou no Windows 10 ...
Eu preciso que o "shell" esteja no Tkinter porque, de um lado da tela, haverá outra coisa conectada às saídas de comando.
Alguém conhece os widgets usados para fazer um shell Python muito simples?
fonte
Respostas:
Shell / Terminal / Prompt de comando simples do Python
type input
,show output
". ************************O script python fornecido acima possui a hierarquia a seguir;
Fluxo de trabalho:
O fluxo de trabalho básico para o código acima é fornecido da seguinte maneira;
def welcome_note():...
Inclui o rótulo que será exibido fora do corpo do texto.def get_text(self):...
Executa duas operações; ** Obter texto do corpo do texto ** & ** Definir saída na caixa de entrada **.def store_commands(self, command):...
Use para armazenar a variável no arquivo.def get_stored_commands(self):
... Obter variável armazenada no arquivo.def check_if_file_empty():
... Verifique o tamanho do arquivo.def run_commands(self, command):...
Este método atua como um compilador python que aceita comandos, processa e produz saída para o comando fornecido. Para executar comandos, eu recomendaria usar,subprocess-module
pois fornece instalações mais poderosas para gerar novos processos e recuperar seus resultados; Executar comandos de janela usando python inclui várias bibliotecas internas, como;1. os ( em detalhes ), 2. subprocesso ( em detalhes ) etc.
Para verificar qual é o melhor uso, visite a referência: o subprocess-module é preferível ao os-module .
def start_terminal(self):...
Este método envolve simplesmente a funcionalidade de iniciar atkinter
janela da sessão e mostrar o layout básico da janela de entrada e saída.Solução alternativa:
Este simples
tkinter GUI based python shell
executa uma funcionalidade simples como o prompt de comando do Windows. Para executar comandos pythondirectly
no prompt de comando sem mover-se para o terminal python, é simples;Seu resultado seria simples como;
Da mesma forma, para executar mais de uma linha diretamente de cada vez, conforme indicado;
Sua saída seria como;
Então, para usar isso
tkinter python shell
;Ou você pode colocar o comando como;
ou assim;
ou simplesmente comando inline como
Você obterá o mesmo resultado.
fonte
input
,output
shell. Funciona como básicopython kernel
. Ele opera apenas no qual é colocado no corpo do texto . Não configurei nenhum buffer ou cache de memória para armazenar o histórico de variáveis. Deixe-me verificar primeiro este requisito neste IDLE!Este é um shell simples usado principalmente
exec()
para executar as instruções python esubprocess.Popen()
executar o comando externo:Basta inserir a instrução python normal:
Ou insira um comando shell:
Você também pode usar a
Up
tecla para recuperar o último comando.Observe que, se você executar um comando do sistema que exija entrada do usuário, o shell será congelado por 5 segundos (período de tempo limite usado em
communicate()
).Você pode modificar a
on_key()
função para atender às suas necessidades.Lembre-se também de que o uso
exec()
não é uma boa prática.fonte
Eu tinha implementado o shell python usando
code.InteractiveConsole
para executar os comandos de um projeto. Abaixo está uma versão simplificada, embora ainda muito longa, porque eu escrevi ligações para chaves especiais (como Return, Tab ...) para se comportarem como no console python. É possível adicionar mais recursos, como preenchimento automático com jedi e destaque de sintaxe com pigmentos.A idéia principal é que eu use o
push()
método docode.InteractiveConsole
para executar os comandos. Este método retornaTrue
se for um comando parcial, por exemplodef test(x):
, e eu uso esse feedback para inserir um...
prompt, caso contrário, a saída é exibida e um novo>>>
prompt é exibido. Capto a saída usandocontextlib.redirect_stdout
.Também há muito código envolvendo marcas e comparando índices, porque evito que o usuário insira texto dentro de comandos executados anteriormente. A idéia é que eu criei uma marca 'input' que me diga onde está o início do prompt ativo e com
self.compare('insert', '<', 'input')
eu posso saber quando o usuário está tentando inserir texto acima do prompt ativo.fonte