2010-05-25 4 views

Répondre

7

Cela ne semble pas être facilement possible; le processus inférieur géré par le module python.el est conçu pour persister dans de nombreuses invocations de python-send-buffer (et amis). Une solution que j'ai trouvé est d'écrire votre propre fonction qui définit sys.argv par programmation à partir dans le processus inférieur:

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

exécuter cette fonction dans votre tampon *scratch* et/ou l'enregistrer dans votre fichier .emacs, puis, si vous voulez, liez-le à une séquence de touches pratique. C-c C-a ne semble pas être utilisé par python-mode, donc peut-être:

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

La commande vous invite à saisir les arguments à utiliser, puis copiez votre tampon source dans un tampon temporaire, préfixer avec un extrait de code qui définit sys.argv à la liste des arguments que vous avez fournis, et enfin appelez python-send-buffer. Le code ci-dessus séparera naïvement la chaîne que vous tapez sur les espaces, donc si vous devez fournir des arguments contenant des espaces, vous aurez besoin d'un algorithme plus sophistiqué.

+0

Merci Sean, j'ai eu l'idée. Ça fait l'affaire. Dans ce cas, je peux également passer les arguments en définissant directement la variable sys.argv avant d'appeler la fonction principale. – Sammy

+0

+1 pour la bonne idée. –

+0

si vous obtenez cette erreur 'progn: La définition de la fonction de symbole est vide: python-send-buffer' essayez de changer' python-send-buffer' en 'python-shell-send-buffer'. – boclodoa

Questions connexes