2010-05-25 2 views

답변

7

이것은 쉽게 가능하지 않습니다. python.el 모듈에 의해 관리되는 열등한 프로세스는 python-send-buffer (및 친구들)의 많은 호출에서 지속되도록 설계되었습니다. 당신이 경우

(defun python-send-buffer-with-my-args (args) 
    (interactive "sPython arguments: ") 
    (let ((source-buffer (current-buffer))) 
    (with-temp-buffer 
     (insert "import sys; sys.argv = '''" args "'''.split()\n") 
     (insert-buffer-substring source-buffer) 
     (python-send-buffer)))) 

가, 다음, 당신의 *scratch* 버퍼에이 기능을 실행 및/또는 .emacs 파일에 저장 : 내가 찾은 하나의 해결책은 하부 프로세스 내에서 프로그램 sys.argv을 설정하는 함수를 직접 작성하는 것입니다 그것을 편리한 키 시퀀스에 바인딩하십시오. C-c C-a 그래서 아마도, python-mode에서 사용하지 않는 것 :

(global-set-key "\C-c\C-a" 'python-send-buffer-with-my-args) 

명령은 인수를 사용하는 다음 sys.argv을 설정하는 코드로 붙일 임시 버퍼에 소스 버퍼를 복사하라는 메시지를 표시합니다 입력 한 인수 목록에 입력하고 python-send-buffer을 호출합니다.

위의 코드는 공백에 입력 한 문자열을 순진하게 분할하므로 공백이있는 인수를 제공해야하는 경우보다 정교한 알고리즘이 필요합니다.

+0

숀 감사합니다. 아이디어가 있습니다. 그것은 트릭을합니다. 이 경우 main 함수를 호출하기 전에 sys.argv 변수를 직접 설정하여 인수를 전달할 수도 있습니다. – Sammy

+0

+1 좋은 아이디어. –

+0

'progn : Symbol의 함수 정의가 void : python-send-buffer'가'python-send-buffer'를'python-shell-send-buffer'로 변경하려고하면이 오류가 발생합니다. – boclodoa