¿Cómo puedo enviar EOF a una transmisión sin cerrar la transmisión?NodeJS: Enviar EOF a la corriente stdin sin secuencia de cierre
Tengo un script que espera la entrada en stdin, luego cuando presiono ctrl-d, escupe salida a stdout, luego espera de nuevo stdin hasta que presione ctrl-d.
En mi secuencia de comandos nodejs, quiero engendrar esa secuencia de comandos, escribir en la secuencia stdin y, a continuación, señalar de alguna manera EOF sin cerrar la secuencia. Esto no funciona:
var http = require('http'),
spawn = require('child_process').spawn;
var child = spawn('my_child_process');
child.stdout.on('data', function(data) {
console.log(data.toString());
});
child.stdout.on('close', function() {
console.log('closed');
})
http.createServer(function (req, res) {
child.stdin.write('hello child\n');
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
}).listen(1337, '127.0.0.1');
Pero si cambio child.stdin.write (...) a child.stdin.end (...), funciona, pero sólo una vez; la corriente se cierra después de eso. He leído en alguna parte que EOF no es en realidad un personaje, es sólo algo que no es un personaje, por lo general -1, por lo que he intentado esto, pero esto tampoco funcionó:
var EOF = new Buffer(1); EOF[0] = -1;
child.stdin.write("hello child\n");
child.stdin.write(EOF);
Estoy bastante seguro de que esto no es posible. Consulte http://stackoverflow.com/questions/9633577/send-a-eof-in-a-pipe-without-closing-it –
¿Por qué no puede cerrar la secuencia de entrada? Estoy bastante confundido aquí. – jcolebrand
Porque quiero volver a escribir en stdin. El proceso espera EOF, luego corta la entrada y luego vuelve a abrir/dev/stdin para esperar más. –