8

node.js API 文档在生成子进程时使用额外的 stdio (fd=4):

// Open an extra fd=4, to interact with programs present a
// startd-style interface.
spawn('prg', [], { stdio: ['pipe', null, null, null, 'pipe'] });

该 stdio 将可通过ChildProcess.stdio[fd].

子进程如何访问这些额外的 stdio?让我们在文件描述符 3 (fd=3) 上使用流而不是管道。

/* parent process */

// open file for read/write
var mStream = fs.openSync('./shared-stream', 'r+');

// spawn child process with stream object as fd=3
spawn('node', ['/path/to/child.js'], {stdio: [0, 1, 2, mStream] });
4

1 回答 1

9

fs.read尽管 node.js 没有在 API 中记录这一点,但您可以使用和使用文件描述符的索引号读取/写入这些流fs.write

通过检查指示子进程可用的这些 stdio 存在的对象,我没有发现任何东西,process据我所知,您将无法检测这些 stdio 是否可从子进程获得。

但是,如果您确定您的子进程将使用这些标准输出生成,那么您可以使用如下读/写函数:

var fd_index = 3;
fs.write(fd_index, new Buffer(data, 'utf8'), 0, data.length, null, function(err, bytesWritten, buffer) {
   if(err) return failure();
   else ...
   // success
});
于 2014-01-20T21:38:55.430 回答