Интерактивный запуск python / ruby ​​из Notepad++ (консоль NppExec)

Я использовал консоль NppExec в Блокноте для запуска скриптов Python и Ruby, используя python script_name.py или же ruby script_name.rbи по большей части это работает хорошо: вывод перенаправляется в консоль NppExec, и мне не нужно переключаться из Notepad++ для тестирования моего сценария.

Однако то, что я действительно хотел бы сделать, это запустить интерактивный сеанс python или ruby ​​из консоли NppExec. Например, просто python или просто irb не разрешать интерактивную работу в консоли.

Кому-нибудь повезло с этим?

Если бы это было возможно, это означало бы возможность использовать функции / методы в данном скрипте из консоли, не выходя из Notepad++.

3 ответа

Решение

Изменить (добавив небуферизованный ключ -u для лучшей производительности)

Оказывается, это возможно для Python, используя -i (проверить) и ключ -u (небуферизованный вывод), несмотря на то, что Npp_Exec не является настоящей консолью:

    python -u -i $(FULL_CURRENT_PATH)

Это запускает текущий файл в консоли Npp_Exec в интерпретаторе Python и из-за -i Переключатель переходит прямо в интерактивный режим, где вы можете продолжить из консоли NppExec, чтобы проверить / использовать любые переменные или определения, предоставленные сценарием.

Если вы установили консоль Npp_Exec для следования текущему каталогу, используя Notepad++ Menu > Plugins > NppExec > Follow $(CURRENT_DIRECTORY, решение еще проще:

    python -u -i $(FILE_NAME)

(Примечание: для Ruby это все еще открытый вопрос, так как Ruby и его интерактивный интерпретатор irb являются двумя отдельными двоичными файлами, и, кажется, не имеют переключателя проверки типа наряду с некоторыми другими странностями при запуске сценариев, которые имеют как ввод, так и вывод...)

Это не похоже, что это возможно. Из документации NppExec я цитирую:

NppExec НЕ...

  • NppExec не является консольным эмулятором. NppExec перенаправляет вывод запущенного процесса в свое окно консоли и может перенаправить ввод окна консоли в запущенный процесс (с некоторыми ограничениями). Консоль NppExec не является "реальным" консольным окном (на самом деле оно использует элемент управления RichEdit для ввода / вывода текста), оно не обеспечивает экранный буфер консоли. Таким образом, консольное приложение, для которого требуется "настоящий" экранный буфер консоли, должно быть запущено в собственном окне консоли (с помощью команды NPP_RUN).

  • NppExec не является интерпретатором команд. NppExec не понимает такие команды, как "copy", "call", "for" и т. Д., Потому что это не "настоящая" консоль и не эмулятор консоли. Тем не менее, NppExec имеет собственную внутреннюю реализацию таких команд, как 'cls', 'cd', 'dir', 'echo', 'set' ('env_set') и вводит другие специфические команды. Также вы можете использовать "cmd /c " для выполнения любой команды cmd внутри NppExec.

  • NppExec не является компилятором. NppExec позволяет вам использовать внешние инструменты и компиляторы для обработки / компиляции вашего текущего файла, но он не имеет возможности сделать это сам по себе. Никакой магии здесь:)

Поскольку отсутствует экранный буфер консоли, консоль NppExec не может рассматриваться как "настоящая" консоль.

Вам гораздо лучше попробовать приложение, разработанное для интерактивного тестирования кода, такое как IPython для Python.

Я новичок в Python и пытался изучить программирование на Python, и из-за некоторых проблем в IDLE(таких как нумерация строк) я решил использовать Notepad++ и, конечно, плагин NPP_EXEC для облегчения компиляции кода. Я преуспел в некоторых других, таких как компиляция файлов *.vbs, но на этот раз для python это не было триумфом по какой-то причине, несмотря на все решения, представленные здесь и где-либо еще.

Я попробовал сначала python -u "$(FULL_CURRENT_PATH)" в NPP_EXEC. Для некоторых скриптов на python результат был удовлетворительным, и когда я продолжил изучать Python, я снова столкнулся с проблемой, потому что результат был не таким, как я ожидал. Я столкнулся с решением здесь [AKE]. к сожалению, до сих пор ни один из них не удался мне.

предположим следующий код.

 # -------------------------------------------------
my_dict = dict ({'Алиса':1, 'Джон':2, 'Эмма':3})
name = raw_input("введите имя: ")
name = name.capitalize()

если имя в my_dict:
    # что-то здесь
еще: print("Имя не существует!")
#------------------------------------------------- 

Я использовал оба:

 python -u "$ (FULL_CURRENT_PATH)" 
а также
 python -u -i "$(FULL_CURRENT_PATH)" 

но результат всегда один и тот же, независимо от того, что вы вводите как имя в приведенном выше коде, результат всегда будет таким:
[Имя не существует!]

Я считаю, что это из-за -u переключатель, поэтому я попытался опустить его и использовать только -i как

 python -i "$(FULL_CURRENT_PATH)" 

Это сработало, но на этот раз после того, как вы увидели вывод, вы должны нажать Ctrl + C, чтобы завершить процесс вручную и выйти из интерактивного режима python в консоли NPP_EXEC.

Я знаю о некоторых других обходных путях, таких как использование меню " Выполнение" Notepad++ и добавление туда некоторых команд или даже использование плагина PyNPP (хотя эти две процедуры практически идентичны путем перенаправления python на cmd), но ни одна из них не имела такого удобства, которое мне нравилось. Может быть, я ожидаю слишком многого от NPP_EXEC, потому что в его справке это не настоящая консоль, но я хотел сделать все это в Notepad++, не имея дело с некоторыми другими процессами, такими как IDLE, cmd или....

Несмотря на это, я был бы признателен за любую помощь, если бы у кого-то был другой успешный опыт.

Другие вопросы по тегам