Я пытаюсь передать результаты grep в скрипт nodejs. Я обнаружил, что должен получать данные от process.stdin.Неизвестный метод process.openStdin()
Также я нашел несколько способов работы с 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); });
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 находятся в нескольких строках, и мне не нужно разделить полученные данные самостоятельно. Но в течение долгого времени я не мог понять, почему вся информация передается напрямую на 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); });
5) Мой собственный вариант. Используйте другой раздел «split» - он позволяет читать из потока и делить данные на 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();
????"
Я искал каждую страницу в google, но не нашел никакой документации по этой функции!
Также во время поиска я обнаружил, что официальная документация для nodejs уродлива - не упоминается, поскольку какие методы версии доступны, нет подробного описания многих объектов/методов, нет комментариев пользователей. И этот метод (openStdin
) - существует и работает, но нигде не описывается! WTF ???
Лучшее, что я могу сказать, [он осуждался назад в 0.3.3] (https://github.com/nodejs/node/blob/43e4efdf210adb2cc3ba26518fd4588f9e0152ff/doc/changelogs/CHANGELOG_ARCHIVE.md#20110102-version-033-unstable) должны существовать для обратной совместимости. – vossad01