2010-05-25 15 views

Odpowiedz

7

To nie wydaje się być łatwe; gorszy proces zarządzany przez moduł python.el został zaprojektowany tak, aby przetrwał w wielu wywołaniach python-send-buffer (i znajomych). Jednym z rozwiązań Znalazłem to napisać własną funkcję, która ustawia sys.argv programowo z poziomu niższego procesu:

(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)))) 

Wykonanie tej funkcji w buforze *scratch* i/lub zapisać go w pliku .emacs, a następnie, jeśli chcesz, powiązać go z wygodną sekwencją klawiszy. C-c C-a nie wydaje się być wykorzystywane przez python-mode, więc może:

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

Komenda poprosi o argumentów użyć, a następnie skopiować bufor źródłowego do tymczasowego bufora poprzedzenie go z fragmentem kodu, który wyznacza sys.argv do listy podanych argumentów, a na końcu zadzwoni pod numer python-send-buffer.

Powyższy kod po prostu naiwnie podzieli napis, który wpisujesz na białych znakach, więc jeśli potrzebujesz argumentów zawierających spacje, potrzebujesz bardziej wyrafinowanego algorytmu.

+0

Dziękuję Sean, wpadłem na pomysł. To działa. W tym przypadku mogę również przekazać argumenty bezpośrednio ustawiając zmienną sys.argv przed wywołaniem funkcji głównej. – Sammy

+0

+1 za świetny pomysł. –

+0

jeśli otrzymasz ten komunikat 'progn: definicja funkcji symbolu jest nieważna: python-send-buffer' spróbuj zmienić' python-send-buffer' na 'python-shell-send-buffer'. – boclodoa

Powiązane problemy