当使用child_process.spawn()方法使用{标准输入输出:“继承”},是有可能对父从子过程接收输出?

问题描述 投票:0回答:1

我试着读subprocess.stdout但节点文件明确规定“如果孩子与标准输入输出催生[1]设置为‘管’以外的任何其他,那么这将是空的。”这是不是我想要的,因为我需要继承。

也试过在我的孩子过程中使用process.send(),但也不能工作。

这里是我的代码BTW:

const {spawn} = require('child_process');

const child = spawn('node index.js', {
    shell: process.env.ComSpec, 
    stdio: 'inherit'
});
javascript node.js ipc child-process
1个回答
0
投票

当然可以,答案可以在Node.js的文件here被发现。

如果您在Windows上运行此,read this section,你会希望确保子处理的终端(在Windows上的cmd.exe)中运行。

您应该能够使用:

const child = spawn('node index.js', ['/c', 'my.bat']);

要么

exec('node index.js', (err, stdout, stderr) => {
  if (err) {
    console.error(err);
    return;
  }
  console.log(stdout);
});

基本上叫“重生(...)”将返回一个子进程,这是一个EvenEmitter。它有两个输出流,“标准错误”,“标准输出”,你会听的“数据”事件。

  • 你读从催生了(子)进程输出错误的“标准错误”流。
  • 你读从催生了(子)进程的“标准输出”流正常输出。

如何监听正常输出和错误:

child.stdout.on('data', (data) => {
  console.log(`stdout: ${data}`);
});

child.stderr.on('data', (data) => {
  console.log(`stderr: ${data}`);
});

要知道,当子进程已经存在,监听“close”事件

child.on('close', (code) => {
  // Perform cleanup.
});
© www.soinside.com 2019 - 2024. All rights reserved.