Я знаю, как читать стандартный вывод, например,
(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"
Но как мне прочитать и стандартный вывод, и стандартную ошибку?
Обновление
На основев комментариях @ Шона ниже я попытался
(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
По какой-то причине он не фиксирует вывод команды на стандартную ошибку.Что я делаю не так?
Обновление 2
Оказывается, вы не можете использовать строковый порт:
Если эти текущие X-порты не являютсяфайлы некоторого вида, и, следовательно, не имеют файловых дескрипторов для дочернего элемента, вместо этого используется / dev / null.