未知方法process.openStdin()

por*_*ion 8 stdin pipe node.js

我正在尝试将grep结果传递给nodejs脚本.我发现,我应该从process.stdin接收数据.

我也找到了几种使用stdin的方法.但它们不同,我无法找到有关它的所有信息.我知道四种方式(前三种方式var data = ""):

1)在搜索结果中最受欢迎

process.stdin.resume();
process.stdin.setEncoding( 'utf8' );
process.stdin.on('data', function(chunk) { data += chunk; });
process.stdin.on('end', function() { console.log('data: ' + data); });
Run Code Online (Sandbox Code Playgroud)

2)看起来像第一个,但功能未知 process.openStdin()

var stdin = process.openStdin();
stdin.on('data', function(chunk) { data += chunk; });
stdin.on('end', function() { console.log('data: ' + data); });
Run Code Online (Sandbox Code Playgroud)

3)在文档中,我读过调用stdin.resume()stdin更改为'old type'.因此,如果我们没有调用"简历" - 我们可以使用"可读"事件

process.stdin.setEncoding('utf8');
process.stdin.on('readable', function() { data += process.stdin.read(); });
process.stdin.on('end', function() { console.log('data: ' + data); });
Run Code Online (Sandbox Code Playgroud)

4)使用模块readline.只要grep结果在多行中并且我不需要自己拆分接收的数据,它就非常有用.但很长一段时间我都无法理解为什么所有信息都直接传递到stdout.然后我发现我们可以在创建接口时传递空对象而不是process.stdout,并且数据不会通过管道输出.

var readline = require('readline'),
//rl = readline.createInterface(process.stdin, process.stdout);
rl = readline.createInterface(process.stdin, {});
rl.on('line', function(data) { console.log('line: ' + data); });
Run Code Online (Sandbox Code Playgroud)

5)我自己的变种.使用另一个模块'split' - 它允许从流中读取并通过指定的符号将数据分成chuks(\r?\n默认情况下).我用它来处理socket,一旦stdin也是可读流 - 我们可以在这里使用它.

var split = require('split');
process.stdin.setEncoding('utf8');
process.stdin.pipe(split()).on('data', function(data) { console.log('line: ' + data); });
Run Code Online (Sandbox Code Playgroud)

我的问题是"什么是process.openStdin();????"

我搜索了谷歌的每一页,但没有找到关于此功能的任何文档!

同时在我发现的搜索中,nodejs的官方文档很难看 - 没有提到,因为哪些版本方法可用,没有关于许多对象/方法的详细描述,没有用户注释.而这种方法(openStdin) - 存在并且有效,但无处可去!跆拳道???

por*_*ion 11

在写这个问题时我找到了答案:)

它位于 nodejs的源代码中:

process.openStdin = function() {
  process.stdin.resume();
  return process.stdin;
};
Run Code Online (Sandbox Code Playgroud)

但我想知道,为什么文档中没有描述它?如果它只是一个私人使用的功能,为什么许多人使用它,谁写了与stdin一起工作?

  • 最好的告诉我,[它在0.3.3中已弃用](https://github.com/nodejs/node/blob/43e4efdf210adb2cc3ba26518fd4588f9e0152ff/doc/changelogs/CHANGELOG_ARCHIVE.md#20110102-version-033-unstable)存在是为了向后兼容。 (2认同)