繁体   English   中英

NodeJS:如何读取由显式生成的进程生成的子进程的stdout和stderr?

[英]NodeJS: How to read stdout and stderr of a child process spawned by an explicitly spawned process?

我最近一直在按需构建服务器上工作。 构建服务器是NodeJS / Express REST API,它实质上包装了Angular CLI和相关的构建工具,用于完成自定义的按需Angular应用程序。

一切工作都按预期进行,但是我希望能够通过状态报告获得更详细的信息,因为当考虑到流程的两个非常大的部分时,Angular构建会非常耗时

该过程中运行时间最长的两个部分:

  1. npm install (通常通过默认的@ angular / schematics集合中的ng-new示意图自动启动)
  2. 实际的ng build命令。

2很容易解决,因为我直接通过child_process.spawn() ng build --prod该进程( ng build --prod )。

1已被证明有点复杂,因为长时间运行的npm install过程实际上是在默认Angular ng-new原理图/命令内部开始的。 因此,如果我的想法是正确的,那么这本质上是一个显式产生的子进程(我产生的ng new ),它在内部产生npm install

我想到的一种解决方法是将--skip-install arg传递给ng new ,这将防止内部npm install过程被原理图启动。 这样,我就可以通过child_process.spawn()手动启动npm install并直接观察stdout和stderr流。

我很好奇是否有人知道在我显式生成的ng new命令中启动的“ npm install”中监视stderr和stdout流的方法吗?

谢谢!

如果您在Linux上运行,则可以使用strace监视另一个进程的输出。

strace -p7835 -e trace= -e write=3

有关更多详细信息,请参见此答案

您当然可以使用spawn从节点调用strace 要查找npm进程的pid (实际上是node进程btw),您需要使用ps命令获取进程树。 已经有一个执行此操作的节点模块: ps-tree ,它似乎也是跨平台的。

有关Windows上strace替代方法,请查看此讨论 我会从Sysinternals那里选择Process Monitor

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM