2012-06-16 2 views
1

두 번로드 할 수없는 패키지 (Twisted)를 가져 오는 작은 GTK 파이썬 애플리케이션이 있습니다.python-mode.el의 C-c C-c에서 새 파이썬 쉘 열기

python-mode.el을 사용하여 emacs에서 응용 프로그램을 실행하고 C-c C-c를 누르면 응용 프로그램이 파이썬 쉘 창에서 실행됩니다. 이제 응용 프로그램을 닫으면 파이썬 셸이 계속 실행됩니다. 이제 C-C C-C를 다시 누르면 Emacs는 오래된 파이썬 프로세스를 "재사용"하므로 Twisted reactor를 두 번 설치하기 때문에 문제가 발생합니다.

버퍼를 실행할 때마다 python-mode.el에서 새 셸 창을 열 수 있습니까?

답변

1

python.el에서 python-buffer 변수가 nil으로 설정된 경우 새 버퍼에서 새로운 하위 프로세스가 시작됩니다. 따라서 python-send-buffer 함수를 호출 할 때마다 해당 변수를 nil으로 다시 설정하여 모든 후속 python-send-buffer 명령에 대해 새로운 Python 프로세스를 강제 실행하도록 할 수 있습니다. 난 당신의 게시물 python-mode.el에 도움을 요청하는 것을 알고

(defadvice 
    python-send-buffer 
    (after python-send-buffer-new-proc activate) 
    (setq python-buffer nil)) 

(ad-activate python-send-buffer) 

하지만 python-mode.el이를 사용하지 않는 경우 내가 놀랄 거라고 나는, 어쨌든 이것을 언급하는 것이 도움이 될 거라고 생각 : 다음과 같은 뭔가 작업을해야합니다 유사한 메커니즘. 시간이 있다면, 나는 그것을 조사하려고 노력할 것입니다.

편집 : python-mode.el 패키지는 py-shell 명령을 사용하여 새로운 하위 파이썬 프로세스를 시작합니다. 사용자가 ad hoc 기능을 제공하는 a mailing list posting을 발견했습니다.

기본적으로 python-mode의 기본 동작을 변경하려고하면이 문제에 대한 최선의 방법이 아니라는 점을 고려해야합니다. 귀하의 코드가 무엇인지 모르겠으며 특히 Twisted에 익숙하지 않지만 동일한 세션 내에서 코드를 두 번째 평가할 때 중대한 오류가 발생하는 것이보다 근본적인 설계 문제의 징후가 될 수 있습니다. . 파이썬 모듈이 한 번만로드되고 연속적인 import 문이 아무런 영향을 미치지 않으면 (예 : reload 또는 execfile()이 필요함) 동일한 모듈의 복수 imports이 문제가 될 수 있음을 알 수 없습니다. 제가 여기서 완전히 벗어난다면, 사과하겠습니다 만,이 가능성에 대해 언급 할 가치가 있다고 느꼈습니다.

+0

감사에 대한 새로운 예약 프로세스를 여는. Twisted 문제 : 나는 두 번째 평가할 때 문제를 일으키는 Twisted 매뉴얼에 따라'twisted.internet import gtk3reactor gtk3reactor.install()' 을 수행한다. 이전에 모듈을 가져 왔는지 여부를 확인하는 표준 방법이 있습니까? – gnirx

+0

@gnirx 일반적으로 두 번째 모듈 가져 오기는 아무런 영향을 미치지 않으며, 특히 오류를 생성하는 효과가있는 경우 코드가 어떤 방식 으로든 재구성되어야한다는 표시 일 수 있습니다. 즉, 귀하의 사건은 예외 일 수 있습니다 - 나는 어떤면에서 확실하기 위해 Twisted의 세부 사항에 대해 충분히 알지 못합니다. 모듈을 가져 왔는지 확인하고 싶다면'import sys'를 실행하고'sys.modules'에 모듈이 있는지 확인하십시오. 그것은 일반적으로 kludgy로 간주되며 가능하면 피하는 것이 좋습니다. –

2

비단뱀 - mode.el은 명령과 함께 제공 PY-버퍼 전용 실행 많은 도움이, 그것을