如何在nodejs中使用child_process获取执行命令的输出?

How to get the output of command executed using child_process in nodejs?

我是 node js 的新手,我想在 node js 中执行一个命令,并想在终端和一些日志文件中显示命令的 运行 状态。

// Displaying the output in terminal but I am not able to access child.stdout
const child = spawn(command,[], {
      shell: true,
      cwd: process.cwd(),
      env: process.env,
      stdio: 'inherit',
      encoding: 'utf-8',
    });

// Pushing the output to file but not able to do live interaction with terminal
const child = spawn(command,[], {
      shell: true,
      cwd: process.cwd(),
      env: process.env,
      stdio: 'pipe',
      encoding: 'utf-8',
    });

是否可以两者兼顾?请帮我解决这个问题?

提前致谢。

您可以为 stdin、stdout 和 stderr 指定单独的选项:

const child = spawn(command,[], {
      shell: true,
      cwd: process.cwd(),
      env: process.env,
      stdio: ['inherit', 'pipe', 'pipe'],
      encoding: 'utf-8',
    });

这样子进程就继承了标准输入,您应该可以与之交互。子进程将管道用于 stdout(和 stderr),您可以将输出写入文件。因为子进程不会将输出发送到终端,所以您需要自己将输出写入终端。这可以通过管道轻松完成:

// Pipe child stdout to process stdout (terminal)...
child.stdout.pipe(process.stdout);

// ...and do something else with the data.
child.stdout.on('data', (data) => ...);

这可能只有在子进程是一个简单的命令行程序并且没有基于文本的高级程序时才能正常工作UI。