Notepad++ (NppExec コンソール) 内から Python / Ruby を対話的に実行する

Notepad++ (NppExec コンソール) 内から Python / Ruby を対話的に実行する

私はメモ帳の 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 unbuffered スイッチを追加)

Pythonでは、-i(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 とその対話型インタープリタはirb2 つの別々のバイナリであり、入力と出力の両方を持つスクリプトを実行するときに、inspect タイプ スイッチやその他の奇妙な点がないようです...)

答え3

私はPython初心者で、Pythonプログラミングを学ぼうとしましたが、IDLEに問題があったため(行番号など)、Notepad++を使うことにしました。もちろんNPP_EXECコードのコンパイルを容易にするプラグイン。コンパイルなどの他のいくつかの方法では成功しました*.vbsファイルですが、今回は Python の場合、ここでや他の場所で提示されたすべての解決策にもかかわらず、何らかの理由で成功しませんでした。

まず、NPP_EXEC で試しましたpython -u "$(FULL_CURRENT_PATH)"。一部の 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++を使うなど、他の回避策もいくつか知っています走るメニューにいくつかのコマンドを追加したり、ピニオンプラグイン (ただし、これら 2 つは cmd で python をリダイレクトすることでほぼ同じ手順を実行します) ですが、どちらも私が望むような利便性はありませんでした。おそらく NPP_EXEC に期待しすぎているのでしょう。ヘルプに記載されているように、これは実際のコンソールではないからです。しかし、IDLE や cmd などの他のプロセスを処理せずに、すべてを Notepad++ で実行したかったのです。

それにもかかわらず、もし誰かが他の成功した経験を持っているなら、私はどんな助けでもありがたいです。

関連情報