gpt4 book ai didi

common-lisp - 如何保证从 sbcl 干净退出

转载 作者:行者123 更新时间:2023-12-02 07:51:08 24 4
gpt4 key购买 nike

我通过 shellscript 调用我的 common-lisp 程序,该脚本使用必要的参数调用 sbcl,并且我必须保证实际程序无论如何完成调用都会以一些/无输出结束干净。

我当前的解决方案如下所示:

sbcl --eval "(unwind-protect 
(handler-case
(progn
(declaim #+sbcl(sb-ext:muffle-conditions style-warning))
(let ((*standard-output* (make-broadcast-stream)))
(ql:quickload \"module\"))
(eval (read-from-string \"(package:start)\"))) ;this starts the program
(error (err)
(FORMAT t \"Something went really wrong:~a~%\" err)
(sb-ext:exit)))
(sb-ext:exit))"

但在以下两种情况下它不起作用:

sbcl --eval "(unwind-protect 
(handler-case
(progn
(define-condition bad () ())
(error 'bad))
(error (err)
(FORMAT t \"Something went really wrong:~a~%\" err)
(sb-ext:exit)))
(sb-ext:exit))"

sbcl --eval "(unwind-protect
(handler-case
(progn
(labels ((rek () (rek)))
(rek)))
(error (err)
(FORMAT t \"Something went really wrong:~a~%\" err)
(sb-ext:exit)))
(sb-ext:exit))"

我现在想知道是否有另一种解决方案可以捕获被调用程序的任何可能结果,并确保 sbcl 调用将退出干净?

对于第一种情况,不指定要捕获什么的一般捕获可能会完成交易。第二种情况必须能够处理错误/错误,这将导致调用低级调试器。

最佳答案

--non-interactive 开关将确保 SBCL 永远不会进入调试器或 REPL。它类似于传递 --disable-debugger 并使用 --eval "(sb-ext:quit)"。如果您不希望它在发生错误时打印回溯,您还可以自定义 sb-ext:*invoke-debugger-hook*

关于common-lisp - 如何保证从 sbcl 干净退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13983447/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com