Emacs:在缓冲区评估时向下级Python shell传递参数
最近我开始用Emacs作为Python的开发环境,但感觉不是很直观……我现在遇到的问题是,当我用C-c C-c来运行代码时,怎么把命令行参数传给下面的Python解释器。谢谢大家的帮助。
1 个回答
7
这件事看起来不太容易做到;由 python.el
模块管理的子进程是设计成可以在多次调用 python-send-buffer
(以及其他相关命令)时持续存在的。一个我找到的解决办法是,自己写一个函数,从子进程内部程序化地设置 sys.argv
。
(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
文件里。如果你想的话,还可以把它绑定到一个方便的快捷键上。C-c C-a
这个组合键似乎在 python-mode
中没有被使用,所以你可以试试:
(global-set-key "\C-c\C-a" 'python-send-buffer-with-my-args)
这个命令会提示你输入要使用的参数,然后把你的源代码缓冲区复制到一个临时缓冲区,并在前面加上一个代码片段,这个片段会把 sys.argv
设置为你提供的参数列表,最后会调用 python-send-buffer
。
上面的代码只是简单地根据空格来分割你输入的字符串,所以如果你需要提供的参数中有空格,你就需要一个更复杂的算法来处理了。