Kilian Kramer
Kilian Kramer

Reputation: 109

How to execute Common Lisp code from Python

I would like to execute a Common Lisp (SBCL) code from Python e.g. via shell. Also I need to run a Lisp-library called Shop3 to execute my Lisp code. I tried:

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

But it's not working, it's only starting sbcl but then stop before to load the asdf library "shop3".

Can you tell how to execute my Lisp code or what alternatives I have to run an external Lisp program (including the Lisp library) to execute it?

Thanks in forward. :)

Upvotes: 2

Views: 716

Answers (1)

sds
sds

Reputation: 60044

&& chains shell commands. I.e., it starts sbcl and waits for it to terminate, and if the termination was successful, then it will try to execute (asdf:load-system "shop3") as a shell command (not what you want!)

You need to use 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")

However, you might want to use the more modern interface instead of os.system. It will also avoid the need for escaping quotes &c:

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

Upvotes: 5

Related Questions