在 Notepad++ (NppExec 控制台) 中以交互方式运行 python / ruby

在 Notepad++ (NppExec 控制台) 中以交互方式运行 python / ruby

我一直在使用记事本中的 NppExec 控制台来使用python script_name.py或运行 python 和 ruby​​ 脚本ruby script_name.rb,并且大多数情况下效果很好:输出被重定向到 NppExec 控制台,并且我不必切换出 Notepad++ 来测试我的脚本。

但是,我真正想要做的是从 NppExec 控制台运行 python 或 ruby​​ 的交互式会话。例如,只允许pythonirb不允许互动地在控制台中工作。

有谁遇到过这样的情况吗?

如果可能的话,就意味着能够在控制台内执行给定脚本中的函数/方法,而无需离开 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”在 NppExec 内执行任何 cmd 命令。

  • NppExec 不是编译器。NppExec 允许您使用外部工具和编译器来处理/编译当前文件,但它无法自行完成此操作。这里没有什么魔法 :)

由于没有控制台屏幕缓冲区,NppExec 控制台不能算作“真正的”控制台。

你最好尝试一个专为交互式代码测试而设计的应用程序,例如伊班对于 Python。

答案2

编辑(添加 -u 无缓冲开关以获得更好的性能)

-i事实证明,对于 Python 来说,使用 (inspect) 开关和 -u (无缓冲输出) 开关是可以实现的,尽管Npp_Exec 不是一个真正的控制台

    python -u -i $(FULL_CURRENT_PATH)

这将在 Python 解释器的 Npp_Exec 控制台中运行当前文件,并且由于-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})
name = raw_input("输入名称:")
名称 = 名称.大写()

如果名称在 my_dict 中:
    #在这里做点什么
else: 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++跑步菜单并在其中添加一些命令,甚至使用核聚变插件(尽管这两个插件通过在 cmd 上重定向 python 执行几乎相同的过程),但它们都没有我喜欢的便利性。也许我对 NPP_EXEC 期望过高,因为它在帮助中并不是一个真正的控制台,但我想在 Notepad++ 中完成所有操作,而无需处理 IDLE 或 cmd 等其他进程或……

尽管如此,如果有人有其他成功的经验,我将非常感激。

相关内容