node.js - 未知方法 process.openStdin()

标签 node.js pipe stdin

我正在尝试将 grep 结果通过管道传输到 nodejs 脚本中。我发现,我应该从 process.stdin 接收数据。

我还发现了几种使用标准输入的方法。但它们是不同的,我找不到所有关于它的信息。我知道四种方式(前 3 种以 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); });

2) 看起来像第一个,但是函数未知 process.openStdin()

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

3) 在文档中,我读到调用 stdin.resume() 会将 stdin 更改为“旧类型”。因此,如果我们不调用“resume”——我们可以使用“readable”事件

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

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

5) 我自己的变体。使用另一个模块 'split' - 它允许从流中读取数据并将数据按指定符号(默认为 \r?\n)分成 chuks。我用它来处理套接字,只要 stdin 也是可读流 - 我们就可以在这里使用它。

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

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

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

此外,在搜索时我发现,nodejs 的官方文档很丑陋 - 没有提及,因为哪些版本的方法可用,没有对许多对象/方法的详细描述,没有用户评论。这个方法 (openStdin) - 存在并且有效,但没有任何描述!什么鬼???

最佳答案

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

它在 source code 中 Node :

process.openStdin = function() {
  process.stdin.resume();
  return process.stdin;
};

但是我想知道,为什么文档中没有描述呢?如果它是一个仅供私有(private)使用的函数,为什么它被许多写过使用标准输入的人使用?

关于node.js - 未知方法 process.openStdin(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33831978/

相关文章:

C管道多条消息只收到一条

c++ - 如何让 C++ 程序读取使用 Python subprocess.call() 传递给它的参数?

javascript - 如何在nodeJs中每次调用函数时生成唯一的UUID?

node.js - 来自 firebasestorage.googleapis.com 和 storage.googleapis 的媒体链接之间的区别?

javascript - Node.js 基本问题

java - Android - 在 native 应用程序和 Java 应用程序之间使用管道

c - 从 TCP 套接字拼接时,Linux 的 splice(2) 是否工作?

go - 如何为从 stdin 读取的内容编写 go Test 函数?

c 语言 scanf - fflush(stdin) - 不起作用

javascript - meteor JS : Selectively load javascript of each template