javascript 将child_process.spawn()方法与{stdio:'inherit'},父进程是否可以从子进程接收输出?

lb3vh1jj  于 2023-02-07  发布在  Java
关注(0)|答案(2)|浏览(106)

我试过阅读subprocess.stdout,但是节点文档明确声明“如果子进程是在stdio[1]设置为'pipe'以外的任何值的情况下产生的,那么这将是null。”这不是我想要的,因为我需要继承。
我还尝试在我的子进程中使用process.send(),但也不起作用。
下面是我的代码btw:

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

const child = spawn('node index.js', {
    shell: process.env.ComSpec, 
    stdio: 'inherit'
});
0pizxfdo

0pizxfdo1#

你试过吗?

{ 
...
stdio: ["pipe", "inherit", "inherit"] 
}

https://nodejs.org/api/child_process.html#optionsstdio

9wbgstp7

9wbgstp72#

是的,你可以,答案可以在Node.js文档中找到。
如果您在Windows上运行此进程,请阅读本节,您将希望确保子进程在终端(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);
});

基本上,调用“spawn(...)”将返回一个ChildProcess,它是一个EvenEmitter。它有两个输出流,“stderr"和“stdout",您将侦听它们上的“data”事件。

  • 您读取了“stderr”流上派生(子)进程的错误输出。
  • 您从“stdout”流上派生的(子)进程读取正常输出。

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

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.
});

相关问题