Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

135
Vistas
child_process no puede ingresar después de un tiempo

Estoy trabajando en un terminal en vivo en el navegador sobre socket.io. Y me encontré con un problema.

Mi código:

 child = require('child_process').spawn('cli opening command'), //simple output to the client child.stdout.on('data', function(data) { io.emit('consoleOut', data); }); //socket io.on('connection', (socket) => { socket.on('consoleInput', (msg) => { //writing the message to the stdin stream child.stdin.write(msg + '\n'); }) });

El problema:

Con esta configuración, la salida siempre es "No such command '[user input]'..." solo en la primera entrada después de que se inició la CLI, funciona bien. Y cuando miro el resultado, veo que la primera letra entre las dos comillas es un 4 decimal ASCII que equivale a un carácter de fin de transmisión.

Ejemplo (si miro la cadena en el navegador):

No existe tal comando '\u0004set verbose 5'

Y lo extraño es que cuando escribo en la transmisión y la codifico, los comandos están perfectamente bien y se ejecutan como deberían. Pero si luego un usuario ingresa su comando, nuevamente todos los comandos no funcionan, incluso el primero.

 child.stdin.write('set verbose 5\n'); child.stdin.write('set verbose 3\n');

Puedo verificar que no es la entrada del usuario porque cuando cambio el socket en la función consoleInput a:

 child.stdin.write('test' + msg + '\n');

Todavía obtengo el mismo resultado (si, por ejemplo, las entradas del usuario establecen detallado 5):

No existe tal comando '\u0004testset detallado 5'

(por supuesto, el comando no funcionaría en primer lugar, pero es para mostrarse en el chat EOT)

Mi conjetura:

Obtengo el carácter EOT solo cuando escribo en el búfer, y mi cadena incluye al menos un \n. Luego, todo hasta el último \n se corta del búfer, y luego queda un carácter EOT. Y tiene sentido si esto es cierto que puedo ingresar un comando al principio que funciona bien porque allí todo el búfer está vacío y no hay ningún carácter EOT.

Gracias Julián ;)

about 4 years ago · Santiago Trujillo
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda