Sto provando a reindirizzare i risultati grep nello script nodejs. Ho scoperto che dovrei ricevere i dati da process.stdin.Metodo sconosciuto process.openStdin()
Inoltre, ho trovato diversi modi per lavorare con stdin. Ma sono diversi e non riesco a trovare tutte le informazioni a riguardo. So quattro modi (primi 3 Iniziare con var data = ""
):
1) più popolari di risultati della ricerca
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) si presenta come il primo, ma con funzione sconosciuta process.openStdin()
var stdin = process.openStdin();
stdin.on('data', function(chunk) { data += chunk; });
stdin.on('end', function() { console.log('data: ' + data); });
3) Nella documentazione che ho letto la chiamata allo stdin.resume()
cambia in "vecchio tipo". Quindi, se non avessimo chiamato 'curriculum' - possiamo usare 'leggibile' evento
process.stdin.setEncoding('utf8');
process.stdin.on('readable', function() { data += process.stdin.read(); });
process.stdin.on('end', function() { console.log('data: ' + data); });
4) Utilizzare modulo readline. È molto utile finchè i risultati di grep sono in linee mutiple e lì non ho bisogno di dividere i dati ricevuti da solo. Ma per molto tempo non sono riuscito a capire perché tutte le informazioni siano state trasmesse direttamente allo stdout. Poi ho scoperto che possiamo passare oggetti vuoti invece di process.stdout durante la creazione dell'interfaccia e che i dati non verranno inviati in output.
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) La mia variante. Usa un altro modulo 'split': consente di leggere dallo stream e di dividere i dati in chuks tramite il simbolo specificato (\r?\n
per impostazione predefinita). L'ho usato per funzionare con il socket e non appena lo stdin è anche lo streaming leggibile - possiamo usarlo qui.
var split = require('split');
process.stdin.setEncoding('utf8');
process.stdin.pipe(split()).on('data', function(data) { console.log('line: ' + data); });
La mia domanda è "Cosa è process.openStdin();
????"
Ho cercato ogni pagina in google, ma non ho trovato alcuna documentazione su questa funzione!
Anche durante la ricerca ho scoperto che la documentazione ufficiale per nodejs è brutta, non menzionata da quali metodi di versione sono disponibili, nessuna descrizione dettagliata su molti oggetti/metodi, nessun commento dell'utente. E questo metodo (openStdin
) esiste e funziona, ma da nessuna parte è stato descritto! WTF ???
Il meglio che posso dire, [è stato ritirato in 0.3.3] (https://github.com/nodejs/node/blob/43e4efdf210adb2cc3ba26518fd4588f9e0152ff/doc/changelogs/CHANGELOG_ARCHIVE.md#20110102-version-033-unstable) deve ancora esistere per la compatibilità all'indietro. – vossad01