lisp - 从命令行与本地长期运行的 Common Lisp 图像交互,可能是守护进程

标签 lisp common-lisp command-line-interface swank

如何从命令行与本地长期运行的 Common Lisp 图像(可能是守护进程)进行交互?

我知道有可能 run a Common Lisp function from a Terminal command prompt , 我也知道 this .

我需要做类似的事情,但使用本地的、已经长期运行的 Common Lisp 镜像,能够从 CLI 或 shell 脚本中轮询可用函数。

有没有办法从 CLI 执行此操作,例如从 bash 脚本调用函数,然后接收函数返回的任何内容?

我虽然可以,例如,创建一个原始的网络服务,也许使用 wooHunchentoot ,通过curlwget 调用函数并获取返回值,但感觉有点绕。

当然,这是 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 库,例如:

但是,感谢 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/

相关文章:

package - 如何在不导出所有符号的情况下运行测试

haskell - 如何在 Haskell 中处理基于 CLI 的应用程序中的箭头键?

javascript - 运行 Node 脚本时更改当前 shell 上下文中的工作目录

emacs - Lisp 交互式 emacs 乘法不正确

lisp - 从混合列表中返回字符列表

.net - 是否有支持 dotnet 或 com 互操作的 lisp 实现或第 3 方库

scala - 无法在 Scala 中使用 Apache Commons CLI Option.builder()

微 Controller 编程中的 LISP 和 Scheme

formatting - 如何使用格式指令生成列表索引

LISP 打印函数文档字符串