Выполнение скрипта 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)