我知道如何读取标准输出,例如
(use-modules (ice-9 popen))
(use-modules (ice-9 textual-ports))
(let ((out (open-input-pipe "date --utc")))
(get-string-all out))
=> "Mon Oct 15 17:51:46 UTC 2018\n"
但是我如何同时读取标准输出和标准错误?
根据下面@Shawn的评论,我尝试了
(let ((p0 (current-error-port))
(p1 (open-output-string)))
(set-current-error-port p1)
(let* ((p2 (open-input-pipe "date --utz"))
(err (get-output-string p1))
(out (get-string-all p2))
(rval (close-pipe p2)))
(set-current-error-port p0)
(format #t "stdout: ~a\nstderr: ~a\nstatus: ~a\n" out err rval)))
它打印
stdout:
stderr:
status: 256
由于某种原因,它不能将命令的输出捕获为标准错误。我在做什么错了?
事实证明您不能使用字符串端口:
如果这些当前X端口不是某种文件,则不要 具有子项的文件描述符,则使用/ dev / null代替。