У меня есть очень большой проект Lisp, выход которого я хотел бы программно подключить к программе Python, то есть использовать Python для вызова программы Lisp на некотором входе и получить выход обратно в Python.Как получить выход программы Lisp в Python?
Проект компилируется только в Clozure Common Lisp (ccl64), и я попытался найти способ превратить его в исполняемый файл (я использую Mac OS X), но это столкнулось с множеством тупиков (I я не программист Lisp).
Настоящая документация для Clozure Common Lisp должна обеспечить решение вышеизложенного, но я не смог ее понять. Приведенные мной примеры создали файл, но Terminal не выполнил их как исполняемые файлы.
How to create executable for ccl64
Я пытался следовать ответ на этот вопрос в 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, запустить Лисп-программу, и получить выход. Однако подпроцесс почему-то отказывается запускать команду 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 и получить выход из Лиспа проекта?
Укажите полный путь к ccl64 двоичной системе. – uselpa
Чтобы немного расширить то, что @LePetitPrince говорит: Когда вы печатаете на терминале, ввод только 'ccl64' работает, потому что исполняемый файл находится в переменной' PATH', но (по умолчанию), 'subprocess' не знает, что 'PATH'. Найдите, где работает исполняемый файл 'ccl64', и передайте весь путь к вашему вызову« Popen ». – BorrajaX