從 Notepad++ 互動執行 python / ruby​​(NppExec 控制台)

從 Notepad++ 互動執行 python / ruby​​(NppExec 控制台)

我一直在記事本中使用 NppExec 控制台使用python script_name.py或來運行 python 和 ruby​​ 腳本ruby script_name.rb,並且在大多數情況下這效果很好:輸出被重定向到 NppExec 控制台,並且我不必切換出 Notepad++ 來測試我的劇本。

但是,我真正希望能夠從 NppExec 控制台運行 python 或 ruby​​ 的互動式會話。例如,只是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”在NppExec內執行任何cmd指令。

  • NppExec 不是編譯器。 NppExec 允許您使用外部工具和編譯器來處理/編譯當前文件,但它本身無法做到這一點。這裡沒有魔法:)

由於沒有控制台螢幕緩衝區,因此 NppExec 控制台不能稱為「真正的」控制台。

您最好嘗試一個專為程式碼互動式測試而設計的應用程序,例如Python對於Python。

答案2

編輯(添加 -u 無緩衝開關以獲得更好的性能)

事實證明,對於 Python 使用-i(inspect) 開關和 -u (無緩衝輸出) 開關來說這是可能的,儘管事實上Npp_Exec 不是真正的控制台:

    python -u -i $(FULL_CURRENT_PATH)

這會在 Python 解釋器的 Npp_Exec 控制台中運行當前文件,並且由於-iswitch 會直接跳到互動模式,您可以在其中繼續從 NppExec 控制台內檢查/使用腳本提供的任何變數或定義。

如果您將 Npp_Exec 控制台設定為使用目前目錄Notepad++ Menu > Plugins > NppExec > Follow $(CURRENT_DIRECTORY,則解決方案更加簡單:

    python -u -i $(FILE_NAME)

(注意:對於 Ruby 這仍然是一個懸而未決的問題,因為 Ruby 及其互動式解釋器irb是兩個獨立的二進位文件,並且在運行具有輸入和輸出的腳本時似乎沒有檢查類型開關以及其他一些奇怪的地方。

答案3

我是 python 新手,嘗試學習 python 編程,由於 IDLE 中的一些問題(如行編號),我決定使用 Notepad++,當然NPP_執行插件以簡化程式碼編譯。我在其他一些方面取得了成功,例如編譯*.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 或...

儘管如此,如果有人有任何其他成功的經驗,我將不勝感激。

相關內容