Выполнение скрипта python с аргументами в режиме comint в emacs

Я пишу Comint-режим для сценария Python.

Скрипт может быть запущен с:

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

Я использую режим comint, так как этот вызов спросит в приглашении некоторую информацию перед запуском.

Если я создаю:

(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 имя-инструмента arg0"

У кого-нибудь есть идея (с коминтами или без них), как я могу запустить этот процесс python и получить скрипт, запрашивающий некоторую информацию перед запуском?

2 ответа

Решение

Документация make-comint-in-buffer (Ch f make-comint-in-buffer RET) заявляет следующее

(make-comint-in-buffer ИМЯ ПРОГРАММА БУФЕРА И ФАКУЛЬТАТИВНЫЙ СТАРТФИЛЬ & отдых
ПЕРЕКЛЮЧАТЕЛИ)

Сделайте Comint процесса NAME в BUFFER, запустив программу.
Если значение BUFFER равно nil, по умолчанию используется имя NAME, окруженное символами *.
Если в буфере есть запущенный процесс, он не перезапускается.

ПРОГРАММА должна быть одной из следующих:
- строка, обозначающая исполняемую программу для создания с помощью
  `Запуска файла-процесс
- пара минусов формы (HOST . SERVICE), обозначающая TCP
  соединение, которое будет открыто через "open-network-stream"
- ноль, обозначающий вновь выделенный pty.
...

Если PROGRAM является строкой, любые другие аргументы являются аргументами для PROGRAM.

Таким образом, правильный способ использования функции - это иметь единственное имя программы в виде строки и передавать аргументы, которые будут переданы программе, в качестве дополнительных аргументов для make-comint-in-buffer следующее

(apply 'make-comint-in-buffer "tool" buffer "/usr/bin/python3.3" nil "tool-name" "arg0")

Вы должны положить tool-name а также arg0 вне строки. Хотите спросить пользователя в интерактивном режиме? Вы можете легко это сделать, см. http://ergoemacs.org/emacs/elisp_basics.html (в конце).

exple:

defun myFunc (firstArg)
  (interactive "sWhat is first arg ? ") ;; note the s
  ( ;; use firstArg)
Другие вопросы по тегам