如何读取命令的标准输出和标准错误?

时间:2018-10-15 17:53:28

标签: scheme guile

我知道如何读取标准输出,例如

(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

由于某种原因,它不能将命令的输出捕获为标准错误。我在做什么错了?

更新2

事实证明您不能使用字符串端口:

  

如果这些当前X端口不是某种文件,则不要   具有子项的文件描述符,则使用/ dev / null代替。

0 个答案:

没有答案