我需要在 NodeJS 中生成一个新进程。它的 stderr 应该被重定向到它的 stdout(与2>&1bash 中的一样)。
程序.js
var child_process = require('child_process');
var opt = {stdio: ['ignore', 'pipe', 'pipe']};
var proc = child_process.spawn('./myscript', [], opt);
proc.stderr.pipe(proc.stdout);
proc.stdout.on('data', function (buf) {
console.log('stdout', buf.toString());
});
proc.on('error', function (...args) {
console.log('error', args);
});
proc.on('exit', function (code, signal) {
console.log('exit', code, signal);
});
proc.on('close', function (code, signal) {
console.log('close', code, signal);
});
Run Code Online (Sandbox Code Playgroud)
我的脚本
#!/bin/bash
echo 111
echo 222 >&1
echo 333 >&2
echo 444
Run Code Online (Sandbox Code Playgroud)
不幸的是,这不起作用。输出中没有333:
stdout 111
222
444
exit 0 null
close 0 null
Run Code Online (Sandbox Code Playgroud)
我认为您的问题是您正在将子 (proc) stderr 传输到它自己的 stdout,而不是您自己的 stdout。proc.stdout 是一个源,而不是一个接收器,所以它不能从另一个管道获取输入。
也许你想要的是,而不是:
proc.stderr.pipe(proc.stdout);
Run Code Online (Sandbox Code Playgroud)
这个:
proc.stderr.pipe(process.stdout);
Run Code Online (Sandbox Code Playgroud)
process.stdout 是您的父进程 stdout,它是一个接收器,因此它可以使用 proc.stderr,它是一个源。
| 归档时间: |
|
| 查看次数: |
3537 次 |
| 最近记录: |