首页 >后端开发 >Golang >如何在执行过程中实时流式传输部分命令输出?

如何在执行过程中实时流式传输部分命令输出?

DDD
DDD原创
2024-12-27 09:04:11830浏览

How Can I Stream Partial Command Output in Real-Time During Execution?

流式传输命令输出进度

在执行命令的过程中,经常需要将输出流式传输到指定的输出位置并实时日志文件。但是,在处理冗长的过程时,cmd.StdoutPipe 方法仅以字符串形式提供最终结果。本文深入研究了在命令执行过程中启用部分输出流的方法。

问题中提供的示例利用 bufio.NewScanner 通过管道读取标准输出。一个常见的误解是它是逐行读取的。实际上,它通过 bufio.ScanLines 函数定义的换行符读取输入。如果执行的命令不产生换行符,则不会立即返回输出。

解决方法:

要克服此限制,请考虑替代方法:

  1. bufio.Split(bufio.ScanRunes):这个方法允许按符文(字符)读取,确保每当新符文可用时返回输出。
  2. 手动字节/符文读取:它涉及创建一个缓冲区数组并重复读取任一字节或代表完整符文的字节片。

读取标准输出和错误至关重要,以防止子进程中由于以下原因而潜在的阻塞:完整的缓冲区。默认情况下,子进程的标准输出和错误流将被丢弃。但是,如果不读取标准错误流,可能会出现错误消息丢失的情况。

以上是如何在执行过程中实时流式传输部分命令输出?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn