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

4451
Assad Ebrahim

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

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

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

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

0
Вы можете использовать `pry` (для Ruby) и добавить строки` require 'pry'` и `binding.pry` в ваш код, чтобы открыть интерактивную консоль в текущей области видимости. itdoesntwork 11 лет назад 0
@itdoesntwork: кажется неправильным говорить это, но ... это не работает! Если серьезно, вы уверены, что у вас это работает, вызывая pry из ** в окне консоли в Notepad ++ (NppExec)? ** Оцените подсказку для pry - только что установили гем, и он кажется лучше, чем irb. Но я не думаю, что это дает мне то, на что я надеюсь: интерактивный запуск ruby ​​из самого Notepad ++. Дайте мне знать, если я что-то упустил. Assad Ebrahim 11 лет назад 0

3 ответа на вопрос

1
prrao

This doesn't look like it's possible. From the NppExec documentation, I quote:

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 :)

Since there is no console screen buffer, the NppExec console cannot qualify as a "real" console.

You're much better off trying an application that was designed for interactive testing of code, such as IPython for Python.

Спасибо за ответ. Ваша цитата о консольных буферах, NppExec и Npp_run заставила меня снова посмотреть на это и проверить, что именно консольные буферы NppExec делают в отношении ввода / вывода. Очевидно, они принимают и ввод, и отражают вывод. Итак, простая программа на python `print (" Введите что-нибудь: ", end =" "); ответ = вход (); print (response) `будет работать при вызове из консоли Npp_Exec с использованием` python $ (FILE_NAME) `. Это привело меня к решению, которое работает - см. Ответ. Так что (+1) за частичный ответ, который мотивировал поиск актуального решения! Благодарю. Assad Ebrahim 11 лет назад 0
0
Assad Ebrahim

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

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

0
Mortaza Toufigh

Я новичок в 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.

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

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