У меня есть очень большой проект Lisp, вывод которого я хотел бы программно направить в программу Python, т.е. использовать Python для вызова программы Lisp на каком-либо входе и вернуть вывод обратно в Python.
Проект компилируется только в Clozure Common Lisp (ccl64), и я пытался найти способ превратить его в исполняемый файл (я использую Mac OS X), но это завело в тупик (я не Lisp). программист).
Эта документация для Clozure Common Lisp должна предоставить решение вышеизложенного, но я не смог ее понять. Примеры, которые я сделал, создали файл, но Терминал не запускал их как исполняемые файлы.
Как создать исполняемый файл для ccl64
Я попытался выполнить ответ на этот вопрос Компиляция 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?
ccl64
работает, потому что исполняемый файл находится в вашей переменной окруженияPATH
, но (по умолчанию)subprocess
не знает, чтоPATH
. Найдите, где находится исполняемый файлccl64
, и передайте весь путь к вашему вызовуPopen
. - person BorrajaX   schedule 01.12.2014