Stream CCL Lisp中的断管错误
我正在使用CCL Lisp并行运行批量实验。在我的机器上,一切正常。但是,我想在服务器上使用它。在服务器上执行此操作时,始终会收到以下错误消息:Stream CCL Lisp中的断管错误,stream,pipe,lisp,Stream,Pipe,Lisp,我正在使用CCL Lisp并行运行批量实验。在我的机器上,一切正常。但是,我想在服务器上使用它。在服务器上执行此操作时,始终会收到以下错误消息: > Error: on #<BASIC-CHARACTER-OUTPUT-STREAM UTF-8 (PIPE/7) #x302001C2725D> : > Broken pipe during write > While executing: #<CCL::STANDARD-KERNEL-METHO
> Error: on #<BASIC-CHARACTER-OUTPUT-STREAM UTF-8 (PIPE/7) #x302001C2725D> :
> Broken pipe during write
> While executing: #<CCL::STANDARD-KERNEL-METHOD CCL::STREAM-IO-ERROR (STREAM T T)>, in process listener(1).
我认为这个错误发生在loop语句中,因为并不是所有命令都写入输出流
如何进一步调试并解决此问题?管道破裂意味着当Lisp进程写入管道时,应该从管道中读取的进程已死亡 瞧,问题可能出在Lisp之外。您需要了解另一个进程发生了什么
另外,您可以将您的写入字符串和princ组合成一个单独的字符串。此外,如果您立即拨打电话,则不需要强制输出。我建议使用CCL邮件列表来处理这些特定错误。也想想回溯。。。看邮件列表下面…他用PRINC写了一个LF。WRITE-LINE写新行,在Windows上可能是CRLF,在类Unix系统上可能是LF。如果软件只在Unix/Linux上运行,那也没关系。@RainerJoswig:是的,我知道。然而,一个需要特定版本新线的协议被打破了,我怀疑现在有很多协议即使您知道在您的特定平台上,在输入和解释中哪些字符代表NLF,也要同样对待CR、LF、CRLF和NEL。只有在输出时,您才需要区分它们。我认为一个人更可能忘记了写行,而不是故意编写一个坏的协议。协议不会坏,因为它们指定了特定的lineend。示例:HTTP需要CRLF。我认为W3C并不在乎我们是否认为它已经坏了。CRLF是必需的。
;; ... A really long function
;; write commands to processes
(format t ".. writing commands to process ~a:~%" counter)
(loop for c in commands
do
(format t " ~a~%" c)
(write-string c output-stream)
(princ #\lf output-stream))
(force-output t)
(force-output output-stream)
(finish-output output-stream)
#-lispworks
(close output-stream))