2014-07-09 28 views
6

quando si utilizza l'interfaccia readline, tutto da stdin viene stampato due volte per stdout:stampe CreateInterface raddoppiare nel terminale

var rl = require('readline'); 
var i = rl.createInterface(process.stdin, process.stdout); 

quando ho eseguito questo codice, tutto scriv nel terminale è duplicato. rendimenti Digitando 'Ciao mondo':

hheelloo wwoorrlldd 

immagino ha senso che lo fa, poiché il modulo readline è destinato a tubo un ingresso ad un'uscita. Ma non è anche destinato a essere utilizzato per creare interfacce a linea di comando? Sono confuso su come dovrei usarlo. Aiuto?

risposta

14

Provare a utilizzare terminal: false:

var readline = require("readline"); 
var rl = readline.createInterface({ 
    input: process.stdin, 
    output: process.stdout, 
    terminal: false 
}); 
+0

ha funzionato. grazie per l'aiuto – dopatraman

-1

Si deve usare le opzioni oggetto Formato:

var i = rl.createInterface({ 
    input: process.stdin, 
    output: process.stdout 
}); 
+2

Non risolve il problema. Continua a vedere doppio =/ – dopatraman

1

ho avuto questo problema come bene e ho risolto facendo in modo che ho sempre e solo avuto un caso di un readline.interface alla volta. Ti consiglio di esplorare l'interfaccia nella funzione in cui viene utilizzata in modo che, una volta lasciato il contesto, venga ripulito. In alternativa, puoi semplicemente dichiarare un'istanza globale che utilizzi ovunque nella tua applicazione. Il problema di fondo qui è che quando due istanze (o più) ascoltano lo stesso flusso di input (process.stdin), entrambe prelevano qualsiasi input e lo elaborano/inviano allo stesso flusso di output (process.stdout). Questo è il motivo per cui stai vedendo il doppio.