获取 node.js 中所有嵌套子进程的标准输出

Posted

技术标签:

【中文标题】获取 node.js 中所有嵌套子进程的标准输出【英文标题】:get stdout of all nested child process in node.js 【发布时间】:2016-04-26 08:39:32 【问题描述】:

我已经创建了一个节点脚本来启动一个子进程,并且我已经成功地将其标准输出重定向到控制台。

但是如果子进程创建了一个嵌套的子进程,那么我就无法获得它的标准输出或标准输入。

我有一个模糊的想法,我必须创建流并将其传递给父进程,但我现在不确定。

有人可以给出如何完成它的方法吗?

下面是我当前启动子进程的代码

spawn = require('child_process').spawn;
ls = spawn "ruby" , [ @editor.getPath() ]
ls.stdout.on 'data', (data) -> console.log data.toString()
ls.stderr.on 'data', (data) -> console.log data.toString()

【问题讨论】:

【参考方案1】:

相关链接:Node API documentation

如果您需要在流中获取孩子(和孙子)的数据,最好的选择是继承流:

spawn('prg', [], stdio: 'inherit' );

如果您需要将子数据放入自定义对象,使用管道,然后安装流数据回调 - 例如您已经做过的。

如果第一级子进程是节点进程,则需要通过“继承”模型生成孙子进程,以便父进程可以使用这两个数据。

否则,子级必须使用“管道”生成并安装处理程序,然后将它们馈送到适当的流中:例如,将孙子级的错误写入子级的 stderr,等等。

如果孙子是非节点程序,“继承”是所需的模型。

如果子进程是非节点,则可能无法获取孙子数据,因为数据的可用性将取决于子进程如何生成孙子进程并处理其流。

希望这会有所帮助。

【讨论】:

以上是关于获取 node.js 中所有嵌套子进程的标准输出的主要内容,如果未能解决你的问题,请参考以下文章

获取嵌套子节点javascript的文本

聚合查询从嵌套子文档中获取最新元素的计数

node.js python子进程不会实时打印

如何使用 Mysql Joins 而不是嵌套子查询来实现相同的结果?

MongoDB聚合查询 - 返回嵌套子文档中的所有项目

如何在挂载期间获取嵌套子组件中的 div - Vue.js