You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在GNU Guile中捕获system函数调用的标准输出?

用Guile的system函数获取命令输出

system函数本身的设计就只返回命令的退出状态,没有内置捕获标准输出的功能。要拿到输出,只能借助shell的重定向技巧配合文件读取来实现,以下是两种可行方案:

  • 方案1:固定临时文件存储输出
    把命令的标准输出重定向到临时文件,之后读取文件内容:

    ;; 执行ls并把输出写入临时文件
    (define exit-status (system "ls > /tmp/ls-output.tmp"))
    ;; 读取临时文件里的输出内容
    (define ls-output (call-with-input-file "/tmp/ls-output.tmp" get-string-all))
    ;; 用完可以删掉临时文件
    (system "rm /tmp/ls-output.tmp")
    

    这样ls-output就存了ls的标准输出,exit-status保留原有的命令退出状态。

  • 方案2:动态生成临时文件避免冲突
    用mktemp生成唯一的临时文件名,防止多进程同时运行时的文件冲突:

    ;; 生成临时文件名并捕获其输出
    (define temp-file (string-trim (with-output-to-string (lambda () (system "mktemp")))))
    ;; 执行ls并输出到临时文件
    (define exit-status (system (string-append "ls > " temp-file)))
    ;; 读取输出内容
    (define ls-output (call-with-input-file temp-file get-string-all))
    ;; 删除临时文件
    (system (string-append "rm " temp-file))
    

需要注意:这两种方式本质都是通过shell重定向把输出转存到文件,再读取文件——因为system本身没有提供直接获取子进程输出的API,它的核心逻辑就是让子进程共享当前进程的IO流,仅返回退出码。

内容的提问来源于stack exchange,提问作者Rovanion

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 21:55:55