Notepad++ 내에서 대화형으로 Python/Ruby 실행(NppExec 콘솔)

Notepad++ 내에서 대화형으로 Python/Ruby 실행(NppExec 콘솔)

저는 Notepad에서 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은 "실제" 콘솔도 아니고 콘솔 에뮬레이터도 아니기 때문에 '복사', '호출', 'for' 등과 같은 명령을 이해하지 못합니다. 그러나 NppExec에는 'cls', 'cd', 'dir', 'echo', 'set'('env_set')과 같은 명령의 자체 내부 구현이 있으며 기타 특정 명령을 도입합니다. 또한 "cmd /c"를 사용하여 NppExec 내에서 cmd 명령을 실행할 수 있습니다.

  • NppExec은 컴파일러가 아닙니다. NppExec을 사용하면 외부 도구와 컴파일러를 사용하여 현재 파일을 처리/컴파일할 수 있지만 자체적으로는 이를 수행할 수 없습니다. 여기에는 마법이 없습니다 :)

콘솔 화면 버퍼가 없기 때문에 NppExec 콘솔은 "실제" 콘솔로 간주될 수 없습니다.

다음과 같은 대화형 코드 테스트용으로 설계된 애플리케이션을 사용해 보는 것이 훨씬 더 좋습니다.IPython파이썬의 경우.

답변2

편집하다(더 나은 성능을 위해 -u 버퍼링되지 않은 스위치 추가)

Python에서는 (검사) 스위치와 -u(버퍼링되지 않은 출력) 스위치를 사용하여 이것이 가능하다는 -i사실이 밝혀졌습니다.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의 경우 여기에 제시된 모든 솔루션에도 불구하고 어떤 이유로든 승리하지 못했습니다.

NPP_EXEC에서 먼저 시도했습니다 python -u "$(FULL_CURRENT_PATH)". 일부 Python 스크립트의 경우 결과가 만족스러웠으며 Python에 대해 더 많이 배우면서 출력이 예상한 것과 다르기 때문에 다시 문제에 직면했습니다. 나는 [AKE]를 통해 해결책을 찾았습니다. 불행히도 지금까지 이들 중 어느 것도 나에게 효과가 없었습니다.

다음 코드를 가정해 보겠습니다.

#-------------------------------------------------
my_dict = dict({'앨리스':1, '존':2, '엠마':3})
name = raw_input("이름을 입력하세요: ")
이름 = name.capitalize()

my_dict에 이름이 있는 경우:
    #여기서뭐좀해봐
else: print("이름이 존재하지 않습니다!")
#-------------------------------------------------

나는 둘 다 사용했습니다 :

python -u "$(FULL_CURRENT_PATH)"
그리고
python -u -i "$(FULL_CURRENT_PATH)"

그러나 결과는 항상 동일합니다. 위 코드에서 이름으로 입력한 내용은 항상 다음과 같습니다.
[이름이 존재하지 않습니다!]

스위치 때문인 것 같아 -u생략하고 그대로 사용하려고 했습니다 -i.

python -i "$(FULL_CURRENT_PATH)"

작동하는 것으로 판명되었지만 이번에는 출력을 관찰한 후 프로세스를 수동으로 종료하고 Python을 종료하려면 Ctrl+를 눌러야 합니다.C인터렉티브NPP_EXEC 콘솔의 모드.

Notepad++를 사용하는 것과 같은 다른 해결 방법을 알고 있습니다.달리다메뉴를 선택하고 거기에 몇 가지 명령을 추가하거나 심지어PyNPP플러그인(이 둘은 cmd에서 Python을 리디렉션하여 거의 동일한 절차를 수행하지만) 이들 중 어느 것도 내가 좋아하는 편리함을 갖지 못했습니다. 아마도 NPP_EXEC에 너무 많은 것을 기대하는 것 같습니다. 실제 콘솔이 아니기 때문에 도움이 되지만 IDLE이나 cmd 또는 ...와 같은 다른 프로세스를 처리하지 않고 Notepad++에서 모든 작업을 수행하고 싶었습니다.

그럼에도 불구하고 누군가 다른 성공적인 경험이 있다면 도움을 주시면 감사하겠습니다.

관련 정보