2010-05-25 6 views

Respuesta

7

Esto no parece ser fácilmente posible; el proceso inferior administrado por el módulo python.el está diseñado para persistir en muchas invocaciones de python-send-buffer (y amigos). Una solución que he encontrado es escribir su propia función que establece sys.argv programación desde dentro del proceso inferiores:

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

ejecutar esta función en su memoria intermedia *scratch* y/o guardarlo en su archivo .emacs, entonces, si quiero, agrégalo a una secuencia de teclas conveniente. C-c C-a no parece ser utilizado por python-mode, así que quizás:

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

El comando le pedirá que los argumentos a utilizar, a continuación, copiar el búfer de origen en un búfer temporal, anteponiendo con un fragmento de código que establece sys.argv a la lista de argumentos que suministró, y finalmente llamará al python-send-buffer.

El código anterior simplemente dividirá ingenuamente la cadena que escriba en el espacio en blanco, por lo que si necesita proporcionar argumentos que tengan espacios en blanco, necesitará un algoritmo más sofisticado.

+0

Gracias Sean, entendí la idea. Lo hace el truco. En este caso, también puedo pasar los argumentos al establecer directamente la variable sys.argv antes de llamar a la función principal. – Sammy

+0

+1 para la gran idea. –

+0

si obtiene este error 'progn: la definición de función del símbolo es nula: python-send-buffer' intente cambiar' python-send-buffer' por 'python-shell-send-buffer'. – boclodoa

Cuestiones relacionadas