【问题标题】:Can't get piped stream from child process无法从子进程获取管道流
【发布时间】:2019-07-07 10:00:49
【问题描述】:

在 parent.js 中

child = fork(filePath,[],{silent : true});
child.send({
        msgtype: "path",
        path: path,
        options: options,
      });
child.stdout.on("data",(data)=>{
     console.log(data);
})

在子进程.js中

let createQueue = require("queue-async");
let readdirp = require("readdirp");

process.on("message", function(msg) {
  let files = "";
  if (msg && msg.msgtype === "path") {
    let pathname = msg.path;
    files = readdirp(pathname);
    process.send({
      msg: "detials",
      details: msg
    });
    files.on("error", e => {
      process.send({
        msg: "killMe",
        details: null
      });
    });
    files.on("end", () => {
      process.send({
        msg: "killMe",
        details: null
      });
    });
    files.pipe(process.stdout)
  }
});

我的问题我没有错误,并且子进程没有退出。

但是child.stdout.on("data")没有触发,不知道后台发生了什么。

为什么我不能从孩子那里获取数据??我错过了什么,有人可以帮忙吗??

【问题讨论】:

    标签: javascript node.js stream


    【解决方案1】:

    parent.js 中,您应该将child.stdout.on 更改为child.on 以便接收子进程发送的内容。

    你还应该反转parent.js中的逻辑

    1. child.on
    2. child.send

    请看https://nodejs.org/api/child_process.html#child_process_subprocess_send_message_sendhandle_options_callback

    【讨论】:

    • 我发现了另一个错误,我使用节点在终端中运行子程序,它抛出,“块”参数必须是字符串或缓冲区类型之一。我发现这与此有关,stackoverflow.com/questions/48458252/…
    • 首先我需要解决这个问题,如何将对象流通过管道传输到标准输出?。
    猜你喜欢
    • 1970-01-01
    • 2015-07-03
    • 2013-03-28
    • 1970-01-01
    • 1970-01-01
    • 2012-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多