我有一个非常大的 Lisp 项目,我想以编程方式将其输出传递给 Python 程序,即使用 Python 在某些输入上调用 Lisp 程序并将输出返回到 Python。
该项目仅在 Clozure Common Lisp (ccl64) 中编译,我确实尝试找到一种方法将其转换为可执行文件(我使用的是 Mac OS X),但这遇到了很多死胡同(我不是 Lisp程序员)。
Clozure Common Lisp 的文档应该提供上述解决方案,但我无法理解它。我制作的示例创建了一个文件,但终端不会将它们作为可执行文件运行。
我试图按照这个问题的答案将 Common Lisp 编译为可执行文件,除了使用 ccl64 的保存应用程序功能。
$ ccl64
Welcome to Clozure Common Lisp Version 1.9-dev-r15612M-trunk (DarwinX8664)!
? (in-package :ccl)
#<Package "CCL">
? (defun main () (print "hello"))
MAIN
? (save-application "hello" :toplevel-function #'main)
我正在尝试使用 Python 的子进程来调用 ccl64,运行 Lisp 程序并获取输出。但是,子进程由于某种原因拒绝运行 ccl64 命令。这是我到目前为止写的:
import subprocess
process = subprocess.Popen(['ccl64', '-h'], stdout=subprocess.PIPE)
out, err = process.communicate()
该变量out
应包含从 ccl64 获取使用/帮助的输出。相反,我得到一个错误:
Traceback (most recent call last):
File "sub.py", line 3, in <module>
process = subprocess.Popen(['ccl64', '-h'], stdout=subprocess.PIPE)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 679, in __init__
errread, errwrite)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 1249, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
如何让 Python 调用 ccl64 并从 Lisp 项目中获取输出?