Executando python / ruby interativamente de dentro do Notepad ++ (console NppExec)

0

Eu tenho usado o console NppExec no Bloco de Notas para executar scripts python e ruby usando python script_name.py ou ruby script_name.rb e, na maioria das vezes, isso funciona bem: a saída é redirecionada para o console NppExec e eu não faço isso. t tem que sair do Notepad ++ para testar meu script.

No entanto, o que eu realmente gostaria de poder fazer é executar uma sessão interativa de python ou ruby no console NppExec. Por exemplo, apenas python ou apenas irb não permitem interativamente funcionando no console.

Alguém teve alguma sorte com isso?

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

    
por Assad Ebrahim 20.08.2012 / 04:30

3 respostas

0

Editar (Adicionando um switch sem buffer para melhor desempenho)

Acontece que isso é possível para o Python usando a opção -i (inspecionar) e a opção -u (saída sem buffer), apesar do fato de que O Npp_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 porque -i alterna diretamente para o modo interativo, onde você pode continuar de dentro do console NppExec para inspecionar / usar qualquer variáveis ou definições fornecidas pelo script.

Se você definir 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 isto ainda é uma questão em aberto, já que Ruby e seu interpretador interativo irb são dois binários separados, e não parecem ter um tipo de inspecionar com algumas outras esquisitices ao executar scripts que possuem entrada e saída ...)

    
por 06.09.2012 / 20:22
1

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

NppExec is NOT...

  • NppExec is not a console emulator. NppExec redirects the running process'es output to its Console window, and can redirect the Console window's input to the running process (with some limitations). The NppExec's Console is not a "real" console window (actually, it uses RichEdit control for text input/output), it does not provide a console screen buffer. Thus, a console application which requires a "real" console screen buffer must be run in its own console window (using NPP_RUN command).

  • NppExec is not a command interpreter. NppExec does not understand such commands as 'copy', 'call', 'for' and so on because it is neither a "real" console nor a console emulator. However, NppExec has its own internal implementation of such commands as 'cls', 'cd', 'dir', 'echo', 'set' ('env_set') and introduces other, specific, commands. Also you can use "cmd /c " to execute any cmd's command inside NppExec.

  • NppExec is not a compiler. NppExec allows you to use external tools and compilers to process/compile your current file, but it has no ability to do it by itself. No magic here :)

Como não há buffer de tela do console, o console NppExec não pode se qualificar como um console "real".

É muito melhor tentar um aplicativo criado para testes interativos de código, como o IPython para Python.

    
por 05.09.2012 / 16:41
0

Sou novo em python e tentei aprender programação python e por causa de alguns problemas no IDLE (como numeração de linhas) eu decidi usar o Notepad ++ e claro, o plugin NPP_EXEC para facilitar a compilação de código. Eu consegui em alguns outros gostam de compilar *. vbs arquivos, mas desta vez para python não era triunfo por algum motivo, apesar de toda a solução apresentada aqui e mais onde.

Eu tentei primeiro o python -u "$(FULL_CURRENT_PATH)" em NPP_EXEC. Para alguns scripts python o resultado foi satisfatório e como eu continuei na aprendizagem mais em python encontrei um problema novamente porque a saída não era tão Eu esperava. Eu encontrei a solução aqui por [AKE]. infelizmente nenhum dos isso funcionou para mim até agora.

suponha o seguinte código.

#-------------------------------------------------
my_dict = dict({'Alice':1, 'John':2, 'Emma':3})
name = raw_input("enter the name: ")
name = name.capitalize()

if name in my_dict:
    #do something here
else: print("The name does not exist!")
#-------------------------------------------------

Eu usei os dois:  

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

mas o resultado é sempre o mesmo, o que você digitar como nome no código acima a saída é sempre:
[O nome não existe!]

Eu acredito que é por causa da opção -u , então eu tentei omiti-lo e usar apenas -i como

python -i "$(FULL_CURRENT_PATH)"

Acontece que funcionou, mas desta vez depois de observar a saída que você precisa pressione Ctrl + C para finalizar o processo manualmente e sair do modo interativo do python no console NPP_EXEC.

Eu sei de outras soluções como o uso do Notepad ++ Executar e adicionar alguns comandos lá ou mesmo usando o plugin PyNPP (embora estes dois fazem quase procedimento idêntico, redirecionando python em cmd), mas nenhum deles teve o conveniência como eu gostava. Talvez eu espere muito de NPP_EXEC, porque como tem em sua ajuda não é um console real, mas eu queria fazer tudo em Notepad ++ sem lidar com alguns outros processos como IDLE ou cmd ou ....

Apesar disso, eu gostaria de receber ajuda se alguém tivesse outro sucesso experiência.

    
por 29.03.2013 / 16:09