我試圖將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
) - 存在和工作,但無處描述!跆拳道???
最好我可以告訴,[它已在0.3.3棄用](https://github.com/nodejs/node/blob/43e4efdf210adb2cc3ba26518fd4588f9e0152ff/doc/changelogs/CHANGELOG_ARCHIVE.md#20110102-version-033-unstable )爲了向後兼容,仍然存在。 – vossad01