首页 > 后端开发 > Golang > 如何将实时命令输出流式传输到父进程和日志文件?

如何将实时命令输出流式传输到父进程和日志文件?

Linda Hamilton
发布: 2024-12-15 07:26:13
原创
806 人浏览过

How to Stream Real-time Command Output to Parent Process and Log File?

流式传输命令:实时输出进度

在此场景中,您的目标是将已执行命令的输出流式传输到父进程和日志文件。但是,标准 cmd.StdoutPipe 以字符串形式返回最终结果,这成为长时间运行的进程的限制。

探索解决方案

提供的代码,它利用 exec.Command, StdoutPipe 和 bufio.NewScanner 按预期工作。它有效地流式传输子进程的输出,将其打印到控制台并实时记录。子进程的实时输出在发生时被捕获并显示。

故障排除提示

如果代码不适合您,请考虑以下原因:

  • 缺少换行符: bufio.NewScanner 读取整行,仅在遇到换行符时返回数据 人物。如果命令不打印换行符,则可能不会立即流式传输输出。
  • 命令输出缓冲区:进程具有 stdout 和 stderr 的默认缓冲区大小。如果缓冲区已满但未读取,子进程可能会因阻塞写入而挂起。因此,请始终读取 stdout 和 stderr 以防止出现此问题。

可能的解决方法

如果命令不打印换行符,还有其他方法来流式传输输出:

  • 逐词阅读:将扫描仪分割功能设置为bufio.ScanWords 读取单个单词而不是行。
  • 按字符读取: 将扫描仪分割功能设置为 bufio.ScanRunes 逐个读取字符。
  • 手动读取:逐字节或逐个符文读取stdout,确保处理UTF-8编码

重要的是要记住,如果子进程写入其默认的 stdout 和 stderr 流,除非显式读取,否则它们将被丢弃。读取这些流可确保您不会错过任何输出或错误消息,即使子进程通常不会输出到这些流。

以上是如何将实时命令输出流式传输到父进程和日志文件?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板