#child-process #output-stream #command #stream-processing #command-output #info #exit-status

app iomux

多路复用子进程的 stdout、stderr 和其他信息

1 个不稳定版本

0.1.0 2023 年 5 月 12 日

#12 in #exit-status

MIT 许可证

30KB
620

iomux 二进制文件将一组子进程的 stdout、stderr 和其他信息多路复用到 stdout。

设计类似于 Unix,旨在为 Unix 工具(grepsed 等)提供方便的输出。

示例 - 以可解析的格式聚合 stdout 和 stderr

有时将 stdout 和 stderr 聚合然后解析它们是有用的。

$ iomux find /etc/ | tee find.log
12971> spawned "find" "/etc/"
12971  /etc/
…
12971  /etc/ssl/private
12971! find: ‘/etc/ssl/private’: Permission denied
…
12981  /etc/passwd
12981  /etc/timezone
…
12981> exit 1

上面的输出都在 stdout 上,包括 find 的 stdout 和 stderr,以及关于 find 进程的元数据,例如其参数和退出状态。

每行以 find 的 PID 开头,然后是一个 "tag",表示该行的信息来源

  • > 关于 find 进程的元数据。
  • stdout
  • ! stderr

解析 find.log

我们可以使用标准 Unix 工具解析日志以回答各种查询。我们可以使用标准 Unix 文本处理来重现 stderr 流

确定 find 的 PID

$ grep '^[0-9]*>' find.log | head -1 | sed 's/>.*$//'
12981

重现 stdout

$ grep '^[0-9]* ' ./find.log | sed 's/^[0-9]*  //'
/etc/
…
/etc/ssl/private
…
/etc/passwd
/etc/timezone
…

重现 stderr

$ grep '^[0-9]*!' ./find.log | sed 's/^[0-9]*! //'
…
find: ‘/etc/ssl/private’: Permission denied

确定退出状态

$ grep '^[0-9]*> exit' ./find.log | sed 's/^.*exit //'
1

示例 - 记录构建的环境细节

假设您正在自动化一个使用 make 的构建过程,并希望记录大约的启动时间戳、环境、pwd 等。使用 iomux,您可以像这样聚合这些信息

$ iomux -- date --iso=s -- pwd -- env -- make | tee build.log

build.log 中的输出将子进程的信息以行导向的格式交织在一起,这使得 Unix 风格的文本处理变得方便。

示例 - 合并日志

我喜欢在一个地方看到我的系统日志和我的桌面日志

$ iomux -- journalctl -f -- tail -F ~/.xsession-errors

依赖关系

~5–17MB
~167K SLoC