如何从命令行与本地长期运行的 Common Lisp 图像(可能是守护进程)进行交互?
我知道有可能 run a Common Lisp function from a Terminal command prompt , 我也知道 this .
我需要做类似的事情,但使用本地的、已经长期运行的 Common Lisp 镜像,能够从 CLI 或 shell 脚本中轮询可用函数。
有没有办法从 CLI 执行此操作,例如从 bash 脚本调用函数,然后接收函数返回的任何内容?
我虽然可以,例如,创建一个原始的网络服务,也许使用 woo或 Hunchentoot ,通过curl
或wget
调用函数并获取返回值,但感觉有点绕。
当然,这是 Emacs 的 SLIME 的众多功能之一,但我需要仅从 CLI 调用函数,而无需调用 Emacs。
有没有办法在 SLIME 之外访问一个时髦的后端?
如果可能的话,lisp 惯用的方法是什么?
如有任何指点,我将不胜感激。
更新
补充说明
很多年前,我对能够远程登录到一个长期运行的 LISP 镜像很感兴趣(我相信在这种情况下将名称大写应该没问题)。如果我没记错的话,它可以在 prompt.franz.com 上找到。一篇文章,以某种方式连接:telnet for remote access to a running application
Telnet 当然是非常不安全的,但是无论出于何种原因,以这种方式访问 Lisp 应用程序的用处都不会被夸大,至少对某些人来说是这样。
一些额外的建议,谢谢
我要感谢 Basile Starynkevitch 详尽而透彻的回答,尤其是在理论方面。我一直在寻找一个更实用的方向,特别是与 Common Lisp 相关的方向。不过,他的回答很有启发性。
我已经准备好开始编写一个本地服务器,可能会使用一个优秀的 Common Lisp 库,例如:
- usocket: Universal socket library for Common Lisp
- iolib: Common Lisp I/O library
- cl-aync: Asynchronous IO library for Common Lisp
但是,感谢 Stanislav Kondratyev,我不必这样做。他指出了一个已经存在的解决方案,可以很好地回答我的问题,ScriptL: Shell scripting made Lisp-like
我在 Linux、FreeBSD 和 OS X 上测试成功,只需确保安装 thin wrapper over POSIX syscalls第一的。在众多功能中(请参阅 README),它允许仅展示选定的功能,妥善处理安全性,甚至提供自定义 C 客户端,作为 ASDF 加载操作的一部分构建,并支持许多新功能,例如I/O,代替 netcat
。
最佳答案
您可能会发现 scriptl 很有用:http://quickdocs.org/scriptl/ .但是,它依赖于 iolib,后者依赖于一些非标准的 C 或 C++ 库,因此构建它并不是很简单。
如果您熟悉 swank 协议(protocol),确实有可能与 swank 服务器通信,该协议(protocol)似乎未被充分记录(请参见此处的示例:https://github.com/astine/swank-client/blob/master/swank-description.markdown)。但是,这会在网络上公开一个 TCP 套接字,这可能是不安全的。我也试过一次,但我对 IPC 速度不满意。
不久前,我写了一个相当简单的 SBCL 特定服务器,它使用本地域套接字进行通信,并使用 C 编写了一个客户端。它非常原始,但您可以看一看:https://github.com/quasus/lispserver .特别是,它支持交互式 IO 和退出代码。服务器和客户端构成了用于部署 Unix 风格软件的简单框架的核心。请随意借用代码和/或联系我以获取解释、建议等。
关于lisp - 从命令行与本地长期运行的 Common Lisp 图像交互,可能是守护进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31377098/