Executando python/ruby interativamente no Notepad++ (console NppExec)

Executando python/ruby interativamente no Notepad++ (console NppExec)

Tenho usado o console NppExec no Notepad para executar scripts python e Ruby usando python script_name.pyor ruby script_name.rb, e na maior parte isso funciona bem: a saída é redirecionada para o console NppExec e não preciso sair do Notepad++ para testar meu roteiro.

No entanto, o que eu realmente gostaria de fazer é executar uma sessão interativa de python ou ruby ​​​​no console NppExec. Por exemplo, apenas pythonou simplesmente irbnão permitainterativamentetrabalhando no console.

Alguém teve alguma sorte com isso?

Se isso fosse possível, significaria ser capaz de exercer funções/métodos em um determinado script a partir do console, tudo sem precisar sair do Notepad++.

Responder1

Isso não parece possível. Da documentação do NppExec, cito:

NppExec NÃO é...

  • NppExec não é um emulador de console. NppExec redireciona a saída do processo em execução para sua janela do Console e pode redirecionar a entrada da janela do Console para o processo em execução (com algumas limitações). O console do NppExec não é uma janela de console "real" (na verdade, ele usa o controle RichEdit para entrada/saída de texto), ele não fornece um buffer de tela do console. Assim, um aplicativo de console que requer um buffer de tela de console "real" deve ser executado em sua própria janela de console (usando o comando NPP_RUN).

  • NppExec não é um interpretador de comandos. O NppExec não entende comandos como 'copy', 'call', 'for' e assim por diante porque não é um console "real" nem um emulador de console. No entanto, o NppExec tem sua própria implementação interna de comandos como 'cls', 'cd', 'dir', 'echo', 'set' ('env_set') e introduz outros comandos específicos. Além disso, você pode usar "cmd /c" para executar qualquer comando do cmd dentro do NppExec.

  • NppExec não é um compilador. O NppExec permite que você use ferramentas e compiladores externos para processar/compilar seu arquivo atual, mas não tem capacidade de fazer isso sozinho. Não há mágica aqui :)

Como não há buffer de tela do console, o console NppExec não pode ser qualificado como um console “real”.

É muito melhor tentar um aplicativo que foi projetado para testes interativos de código, comoIPythonpara Python.

Responder2

Editar(Adicionando a opção -u sem buffer para melhor desempenho)

Acontece que isso é possível para Python usando a -iopção (inspecionar) e a opção -u (saída sem buffer), apesar do fato de queNpp_Exec não é um console verdadeiro:

    python -u -i $(FULL_CURRENT_PATH)

Isso executa o arquivo atual no console Npp_Exec no interpretador Python e, por causa da -iopção, vai direto para o modo interativo, onde você pode continuarde dentro do console NppExecpara inspecionar/usar quaisquer variáveis ​​ou definições fornecidas pelo script.

Se você configurar seu console Npp_Exec para seguir o diretório atual usando Notepad++ Menu > Plugins > NppExec > Follow $(CURRENT_DIRECTORY, a solução será ainda mais simples:

    python -u -i $(FILE_NAME)

(Nota: Para Ruby, esta ainda é uma questão em aberto, já que Ruby e seu interpretador interativo irbsão dois binários separados e não parecem ter uma opção de tipo de inspeção junto com algumas outras esquisitices ao executar scripts que possuem entrada e saída. .)

Responder3

Sou novo em python e tentei aprender programação em python e por causa de alguns problemas no IDLE (como numeração de linhas) decidi usar o Notepad++ e claroNPP_EXECplugin para facilitar a compilação do código. Eu tive sucesso em alguns outros, como compilar*.vbsarquivos, mas desta vez para python não foi um triunfo por algum motivo, apesar de toda a solução apresentada aqui e em outros lugares.

Tentei primeiro python -u "$(FULL_CURRENT_PATH)"no NPP_EXEC. Para alguns scripts python o resultado foi satisfatório e conforme continuei aprendendo mais em python encontrei um problema novamente porque a saída não foi como eu esperava. Encontrei a solução aqui por [AKE]. infelizmente nada disso funcionou para mim até agora.

suponha o seguinte código.

#-------------------------------------------------
meu_dict = dict({'Alice':1, 'John':2, 'Emma':3})
nome = raw_input("digite o nome: ")
nome = nome.capitalizar()

se o nome estiver em my_dict:
    #faça algo aqui
else: print("O nome não existe!")
#-------------------------------------------------

Eu usei os dois:

python -u "$(FULL_CURRENT_PATH)"
e
python -u -i "$(FULL_CURRENT_PATH)"

mas o resultado é sempre o mesmo, seja qual for o nome que você inserir no código acima, a saída será sempre:
[O nome não existe!]

Acredito que seja por causa da -umudança, então tentei omiti-la e usar da mesma -iforma

python -i "$(FULL_CURRENT_PATH)"

Acabou funcionando, mas desta vez depois de observar a saída você deve pressionar Ctrl+ Cpara encerrar o processo manualmente e sair do pythoninterativomodo no console NPP_EXEC.

Conheço algumas outras soluções alternativas, como usar o Notepad++Corrermenu e adicionando alguns comandos lá ou até mesmo usandoPyNPPplugin (embora esses dois façam procedimento quase idêntico redirecionando python no cmd), mas nenhum deles teve a comodidade que eu gostava. Talvez eu espere muito do NPP_EXEC, pois como tem em sua ajuda não é um console real, mas eu queria fazer tudo no Notepad++ sem lidar com outros processos como IDLE ou cmd ou ....

Apesar disso, eu apreciaria qualquer ajuda se alguém tivesse alguma outra experiência bem-sucedida.

informação relacionada