2015-10-13 19 views
2

我对一些脚本使用Common Lisp,并希望执行shell命令run-program。我一直试图操纵输出以获得(output error returncode)的形式的列表,但我只能从运行程序得到输出或返回代码。CLISP:从shell命令返回stdout,stderr和retcode

的论点在这里只给你:output(没有:error):

有越来越三者的方法吗?事情是这样的:

(setf retcode (my-special-cmd "ls" :output stream1 :error stream2)) 
(print (list stream1 stream2 retcode)) 
+0

[Common Lisp中的值函数]的可能重复(http://stackoverflow.com/questions/22795608/values-function-in-common-lisp) – sds

回答

3

run-program回报multiple values。 您可以按照链接问题中的说明处理它们。

您链接到医生说:

如果:STREAM指定为:输入或:OUTPUT,则返回一个Lisp流。如果:对于:INPUT和:OUTPUT都指定了STREAM,则返回三个Lisp STREAM,如EXT:MAKE-PIPE-IO-STREAM。

因此,你需要的是既

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

(ext:run-program "ls" :input :stream :output :stream) 

那么你将不得不从流读取返回来获得命令的输出。但是,在这种情况下,您将失去退出代码。