Запуск Python / Ruby в интерактивном режиме из Notepad++ (консоль NppExec)

Запуск Python / Ruby в интерактивном режиме из Notepad++ (консоль NppExec)

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

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

У кого-нибудь с этим был успех?

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

решение1

Это не выглядит возможным. Из документации 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.

решение2

Редактировать(Добавление ключа -u unbuffered для повышения производительности)

Оказывается, это возможно для Python с использованием -iпереключателя (inspect) и переключателя -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представляют собой два отдельных двоичных файла и, похоже, не имеют переключателя типа проверки, а также некоторых других странностей при запуске скриптов, имеющих как входные, так и выходные данные...)

решение3

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

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

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

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

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

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

питон -u "$(ПОЛНЫЙ_ТЕКУЩИЙ_ПУТЬ)"
и
python -u -i "$(FULL_CURRENT_PATH)"

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

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

python -i "$(FULL_CURRENT_PATH)"

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

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

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

Связанный контент