Я хочу, чтобы библиотека взаимодействовала с приложениями CLI на этих языках.(Это не по теме в SO? Если да, то где я могу это опубликовать?)
Не похоже, что есть реализация библиотеки, похожей на ожидаемую, для Racket;вы, безусловно, можете использовать system или subprocess для запуска процессов и взаимодействия с ними, используя порты ввода и вывода.
system
subprocess
В Common Lisp я бы использовал uiop:launch-program, у которого есть возможность сделать потоки stdin, stdout и stderr доступными из возвращенной информации о процессе.Примерно так:
uiop:launch-program
(let ((ssh-process (uiop:launch-program (list* "ssh" hostname ssh-args) :input :stream :output :stream :error-output :stream))) (format (process-info-input ssh-process) "foo.sh a bar ~a" foo-arg) (frobnicate (read-line (process-info-output ssh-process))))
UIOP поставляется с ASDF, который поставляется со всеми современными реализациями Common Lisp.Вот ЧИТАТЬ: https://gitlab.common -lisp.net / asdf / asdf / blob / master / uiop / README.md .
для Clojure - встроенный clojure.java.shell - хороший вариант для вызовов, ожидающих напрямую https://clojuredocs.org/clojure.java.shell/sh
Я нашел список альтернатив в Википедии, но он не включает ни одного для Лиспов.: (
https://en.m.wikipedia.org/wiki/Expect