如何将 Lisp 程序的输出转换为 Python?

2024-07-01

我有一个非常大的 Lisp 项目,我想以编程方式将其输出传输到 Python 程序,即使用 Python 在某些输入上调用 Lisp 程序并将输出返回到 Python 中。

该项目仅在 Clozure Common Lisp (ccl64) 中编译,我确实尝试找到一种方法将其转换为可执行文件(我使用的是 Mac OS X),但这遇到了很多死胡同(我不是 Lisp)程序员)。

Clozure Common Lisp 的文档应该提供上述问题的解决方案,但我无法理解它。我制作的示例创建了一个文件,但终端不会将它们作为可执行文件运行。

如何为 ccl64 创建可执行文件 http://ccl.clozure.com/manual/chapter4.9.html

我试图遵循这个问题的答案将 Common Lisp 编译为可执行文件 https://stackoverflow.com/questions/14171849/compiling-common-lisp-to-an-executable除了使用 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 项目获取输出?


Python 代码中的错误很明显:没有这样的文件或目录。

您需要在 Python 代码中告诉您想要运行哪个应用程序,以便它实际找到它。

也不清楚为什么你将 Lisp 可执行文件保存在名为hello,但你并没有试图调用它。具有必要的路径。您的代码尝试调用 Clozure CL - 没有必要的路径 - 但为什么呢?您刚刚保存了一个可执行文件。为什么要调用 Clozure CL 来运行它?我还会保存可执行文件预置内核- 这使它成为独立的。

Example:

调用 Clozure CL:

rjmba:~ joswig$ ccl
Welcome to Clozure Common Lisp Version 1.9-dev-r15612M-trunk  (DarwinX8664)!

定义main功能:

? (defun main () (print "hello"))
MAIN

保存可执行文件:

? (save-application "hello" :toplevel-function #'main :prepend-kernel t)

从同一目录运行新的可执行文件:

rjmba:~ joswig$ ./hello

"hello" 

使用参数调用 Clozure CL 应用程序:

bash-3.2$ ccl
Welcome to Clozure Common Lisp Version 1.9-dev-r15612M-trunk  (DarwinX8664)!

功能ccl::command-line-arguments以列表形式返回参数。第一项是被调用的应用程序本身。

? (defun main ()                                                                
    (print (second (ccl::command-line-arguments))))
MAIN

? (save-application "hello"                                                     
                    :toplevel-function #'main                                   
                    :prepend-kernel t)

调用它:

bash-3.2$ ./hello hello!

"hello!"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 Lisp 程序的输出转换为 Python? 的相关文章

  • py.test 日志控制

    我们最近切换到 py test 进行 python 测试 顺便说一句 这非常棒 但是 我试图弄清楚如何控制日志输出 即内置的 python 日志记录模块 我们安装了 pytest capturelog 并且它按预期工作 当我们想查看日志时
  • 使用具有阿拉伯字符的 json.dumps 将字典转换为 json [重复]

    这个问题在这里已经有答案了 我有一本包含阿拉伯语单词的字典 例如 data name name print json dumps data file open data json a encoding utf 8 Output name u
  • 导入pygame时出错

    我已经使用以下命令通过 Anaconda 安装了 pygame conda install channel https conda anaconda org kne pygame 然后我尝试导入 pygame 并收到以下错误 Traceba
  • 如何交换两个 DataFrame 列?

    In MATLAB to swap the first and second columns of a table A one would do this1 A A 2 1 3 end 如果有类似的方便方法可以做到这一点A是一只熊猫Data
  • 在django中使用pre_save时取消保存模型

    我有一个模型 class A models Model number models IntegerField 但是当我调用 A save 时 我想确保该数字是素数 或其他条件 否则应该取消保存指令 那么如何取消pre save信号接收器中的
  • 加速使用 Pyinstaller 创建的 .exe

    我已经使用 Pyinstaller 将我的程序 用 Python 3 6 1 编写 使用 Python 3 5 3 转换 从 py 转换为 exe 然而 它是加载速度极其缓慢 与在空闲状态下运行时我优化了我想什么问题是 导入大量模块 所以我
  • 无法从 BigQuery 中的工作表查询表

    我正在尝试在 python 中使用 BigQuery 来查询通过工作表生成的表 from google cloud import bigquery Prepare connexion and query bigquery client bi
  • Python pandas 使用 read_hdf 和 HDFStore.select 从 HDF5 文件读取特定值

    所以我使用一个简单的数据集创建了 hdf5 文件 如下所示 gt gt gt pd read hdf STORAGE2 h5 table A B 0 0 0 1 1 1 2 2 2 3 3 3 4 4 4 使用这个脚本 import pan
  • 使用 plt 在热图上绘制梯度箭头

    我正在尝试绘制箭头以可视化热图上的梯度 这是我到目前为止的代码 import matplotlib pyplot as plt import numpy as np function to plot lambda x y x y 2 hor
  • 如何使 Selenium WebDriver 不等待整个页面加载

    我正在使用 python 2 7 和 Selenium webdriver for Firefox 我有一个无法解决或在互联网上找到解决方案的问题 我的任务是打开大约 10k 个网页 adsl 路由器 Web 界面 通过 IP 地址 并上传
  • 抓取框架 NTSCtoUSB 加密狗、opencv2、python 包装器

    Context 我一直在研究 opencv2 的 python 包装器 我想尝试一些想法并使用类似于汽车 后视 摄像头的广角摄像头 我从一辆报废的撞车上得到了一根 它有 4 根电线 我从电线的颜色编码中进行了有根据的猜测 将其连接起来 以便
  • Python:使用用户输入作为类名的类工厂

    我想动态地将类属性添加到超类 此外 我想创建动态继承自该超类的类 并且这些子类的名称应取决于用户输入 有一个超类 Unit 我可以在运行时向其添加属性 这已经有效了 def add attr cls name value setattr c
  • 任何方法来跟踪Python中的最后5个数据点

    所以我有一个包含多个数字的数组 随着我的脚本运行 越来越多的数字被附加到该数组中 但是 我对所有数字并不感兴趣 而只想跟踪最后 5 个数字 目前 我只是将所有数字存储在数组中 然而 这个数组变得非常大并且充满了不必要的信息 我考虑过创建一个
  • 使用后禁用按钮

    最近我决定重写我的不和谐机器人并添加按钮 到目前为止我遇到的主要问题是我无法禁用按钮就在被按下之后人们被告知是关于button disabled True实际上 它会禁用该按钮 但它只是将其发送为禁用状态 因此永远无法按下它 我想要的是能够
  • 一次将多个函数应用于 Pandas groupby 对象

    已经提出了这个问题的变体 参见这个问题 https stackoverflow com questions 40532024 pandas apply multiple functions of multiple columns to gr
  • Matplotlib 中的月份定位器

    我有这样的情节 我想更改 12 个位置的刻度 以这种格式指示相应的月份 Jan Feb Mar 当我使用 MonthLocator 函数时 刻度线从图中消失 ax plt gca ax set xlim 0 365 ax xaxis set
  • Selenium 不打开指定的 URL 并显示数据:,

    我正在尝试在 chrome 中使用 selenium 打开 URL 我有 chromedriver 可用 以下是我要执行的代码 from selenium import webdriver chrome options webdriver
  • 在 Mac 上安装 TensorFlow 时出现问题

    我正在尝试遵循安装指南张量流组织 http www tensorflow org get started os setup md并因此使用 Homebrew 再次安装了 Python 版本 2 当我按照描述运行安装时 pip install
  • 将函数应用于数据帧的每一行

    下面有什么更优雅的实现方式 我想应用一个函数 my function到数据帧 其中数据帧的每一行都包含函数的参数 然后我想将函数的输出写回数据帧行 results pd DataFrame for row in input panel it
  • OpenCV中如何在点之间画线?

    我有一个元组数组 a 375 193 364 113 277 20 271 16 52 106 133 266 289 296 372 282 OpenCV中如何在点之间画线 这是我的代码不起作用 for index item in enu

随机推荐