2

我正在为 python 脚本编写一个 comint 模式。

该脚本可以通过以下方式启动:

/usr/bin/python3.3 tool-name arg0

我正在使用 comint-mode,因为此调用会在运行前在提示符中询问一些信息。

如果我创建:

(defun create-app ()
  "create application by using python tool"
  (interactive)
  (progn 
    (setq default-directory "/path/to/tool")
    (setq buffer (get-buffer-create "*buffer_name*"))
    (apply 'make-comint-in-buffer "tool" buffer "/usr/bin/python3.3" nil nil)
    )
  )

一切正常,python 启动,但如果我写:

(defun create-app ()
  "create application by using python tool"
  (interactive)
  (progn 
    (setq default-directory "/path/to/tool")
    (setq buffer (get-buffer-create "*buffer_name*"))
    (apply 'make-comint-in-buffer "tool" buffer "/usr/bin/python3.3 tool-name arg0" nil nil)
    )
  )

缓冲区告诉我它不能执行程序“/usr/bin/python3.3 tool-name arg0”

有谁知道(有或没有 comint)我如何启动这个 python 进程并让脚本在启动前询问一些信息?

4

2 回答 2

2

make-comint-in-buffer( )的文档字符串C-hfmake-comint-in-bufferRET说明了以下内容

(make-comint-in-buffer NAME BUFFER PROGRAM &optional STARTFILE &rest
开关)

在 BUFFER 中创建一个 Comint 进程 NAME,运行 PROGRAM。
如果 BUFFER 为 nil,则默认为由 `*'s 包围的 NAME。
如果 BUFFER 中有正在运行的进程,则不会重新启动。

程序应该是以下之一:
- 一个字符串,表示要通过创建的可执行程序
  `开始文件进程'
- 一对形式的缺点(HOST . SERVICE),表示 TCP
  要通过“open-network-stream”打开的连接
- nil,表示新分配的 pty。

...

如果 PROGRAM 是一个字符串,那么任何更多的 args 都是 PROGRAM 的参数。

所以正确的使用函数的方法是将程序的唯一名称作为字符串,并将要传递给程序的参数传递给程序,作为附加参数make-comint-in-buffer如下

(apply 'make-comint-in-buffer "tool" buffer "/usr/bin/python3.3" nil "tool-name" "arg0")
于 2014-03-21T14:52:49.120 回答
0

你必须把tool-namearg0放在字符串之外。您想以交互方式询问用户吗?您可以轻松地做到这一点,请参阅http://ergoemacs.org/emacs/elisp_basics.html(最后)。

例如:

defun myFunc (firstArg)
  (interactive "sWhat is first arg ? ") ;; note the s
  ( ;; use firstArg)
于 2014-03-21T14:56:28.860 回答