【问题标题】:How to execute Common Lisp code from Python如何从 Python 执行 Common Lisp 代码
【发布时间】:2021-05-13 15:10:58
【问题描述】:

我想从 Python 执行 Common Lisp (SBCL) 代码,例如通过外壳。我还需要运行一个名为 Shop3 的 Lisp 库来执行我的 Lisp 代码。我试过了:

os.system('sbcl && (asdf:load-system "shop3") && (in-package:SHOP-USER) && (load "/Users/kiliankramer/Desktop/Shop-Planer/planner-new")')

但它不起作用,它只是启动 sbcl,然后在加载 asdf 库“shop3”之前停止。

你能告诉我如何执行我的 Lisp 代码,或者我必须运行一个外部 Lisp 程序(包括 Lisp 库)来执行它吗?

谢谢转发。 :)

【问题讨论】:

  • 我试图从 python 执行的文件是 "load"/Users/kiliankramer/Desktop/Shop-Planer/planner-new" 但为此我需要先加载 shop3。
  • 我对商店不熟悉。可以在 hylang (github.com/hylang/hy) 中执行吗?
  • 谢谢,我读到了 Hy,我会试试的! :) (ps: SHOP3 - Simple Hierarchical Order Planner 是机器人的规划器)
  • SHOP3 是一个计划任务的系统,用 Common Lisp 编写:github.com/shop-planner/shop3
  • 另见 cl4py,它应该在这种情况下有所帮助:github.com/marcoheisig/cl4py

标签: python common-lisp


【解决方案1】:

&& 链接 shell 命令。即,它启动sbcl并等待它终止,如果终止成功,那么它将尝试将(asdf:load-system "shop3")作为一个shell命令执行(不是你想要的!)

你需要使用sbcl command line arguments:

os.system("sbcl --eval '(asdf:load-system \\"shop3\\")' --eval '(in-package :SHOP-USER)' --load /Users/kiliankramer/Desktop/Shop-Planer/planner-new")

但是,您可能希望使用the more modern interface 而不是os.system。 它还可以避免转义引号 &c:

subprocess.run(["sbcl","--eval",'(asdf:load-system "shop3")',
                "--eval",'(in-package :SHOP-USER)',
                "--load","/Users/kiliankramer/Desktop/Shop-Planer/planner-new")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-09
    • 1970-01-01
    相关资源
    最近更新 更多