CLISP:从shell命令返回stdout、stderr和retcode

CLISP:从shell命令返回stdout、stderr和retcode,shell,lisp,common-lisp,clisp,Shell,Lisp,Common Lisp,Clisp,我正在使用CommonLisp编写一些脚本,希望能够执行shell命令。我一直在尝试操作输出,以获取(output error returncode)格式的列表,但我只能从运行程序获取输出或返回代码 此处的参数仅为您提供:输出(没有:错误): 有办法把这三个都弄到手吗?大概是这样的: (setf retcode (my-special-cmd "ls" :output stream1 :error stream2)) (print (list stream1 stream2 retcode))

我正在使用CommonLisp编写一些脚本,希望能够执行shell命令。我一直在尝试操作输出,以获取
(output error returncode)
格式的列表,但我只能从运行程序获取输出或返回代码

此处的参数仅为您提供
:输出
(没有
:错误
):

有办法把这三个都弄到手吗?大概是这样的:

(setf retcode (my-special-cmd "ls" :output stream1 :error stream2))
(print (list stream1 stream2 retcode))
返回。 您可以按照链接问题中的说明处理这些问题

您链接到的文档显示:

如果为:INPUT或:OUTPUT指定了:STREAM,则返回Lisp流。如果:INPUT和:OUTPUT都指定了:STREAM,那么对于函数EXT:MAKE-PIPE-IO-STREAM,将返回三个Lisp流

因此,你需要的是

(EXT:MAKE-PIPE-IO-STREAM "ls")

然后,您必须读取返回的流才能获得命令输出。但是,在这种情况下,您将丢失退出代码。

可能存在重复的退出代码
(ext:run-program "ls" :input :stream :output :stream)