2015-11-20 37 views
5

我試圖將grep結果輸入到nodejs腳本中。我發現,我應該從process.stdin接收數據。未知方法process.openStdin()

另外我發現了幾種使用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更改爲「舊類型」。所以如果我們不叫'簡歷' - 我們可以使用'可讀'事件

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結果是多行的,並且我不需要自己拆分接收到的數據,這是非常有用的。但很長一段時間,我不明白爲什麼所有的信息都直接傳送到標準輸出。然後,我發現我們可以在創建接口時傳遞空對象而不是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)我自己的變種。使用另一個模塊「分割」 - 它允許從流中讀取數據並按指定符號將數據分割成chuks(默認爲\r?\n)。我用它來處理套接字,只要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) - 存在和工作,但無處描述!跆拳道???

回答

4

在寫我已經找到了答案:)

正是在中的NodeJS的source code問題:

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

但我不知道,爲什麼不以文件描述?如果它只是一個私人用途的功能,爲什麼許多人使用它,他們寫關於stdin的工作?

+0

最好我可以告訴,[它已在0.3.3棄用](https://github.com/nodejs/node/blob/43e4efdf210adb2cc3ba26518fd4588f9e0152ff/doc/changelogs/CHANGELOG_ARCHIVE.md#20110102-version-033-unstable )爲了向後兼容,仍然存在。 – vossad01