【问题标题】:Extra stdio streams for node.js processnode.js 进程的额外标准输出流
【发布时间】:2014-01-20 21:38:55
【问题描述】:

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'] });

该标准输入输出将通过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] });

【问题讨论】:

  • 你解决了吗?

标签: node.js node.js-stream


【解决方案1】:

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

通过检查process 对象,我没有发现任何指示子进程可用的这些标准输出的对象,据我所知,您将无法检测到这些标准输出是否可从孩子。

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

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2011-12-31
  • 2013-06-25
  • 2021-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-11
  • 2014-07-13
相关资源
最近更新 更多