Estoy tratando de escribir un script de nodo que pueda ejecutar un comando externo que tenga dos capas de entrada de usuario.
const conf = spawn('my command', {shell: true}); conf.stdout.on('data', (data) => { process.stdout.write(data) conf.stdin.write("\n") }) Básicamente, spawn se ejecuta y obtengo la salida del comando externo que se muestra correctamente al escribirlo en stdout , luego simulo al usuario presionando enter escribiendo en stdin conf.stdin.write("\n") , el problema que tengo es que cuando eso es simulado, recibo otro aviso del comando que ejecuté en spawn y simplemente continúa en un bucle eterno.
¿Hay alguna forma de escuchar el primer conjunto de datos, escribir la entrada, leer el segundo conjunto de datos y pasar alguna entrada que el usuario escriba en la terminal?
Muchas gracias
Puede usar la biblioteca de sincronización de avisos, obtener la entrada del usuario y luego escribirla en la entrada estándar:
const prompt = require("prompt-sync")(); const { spawn } = require("node:child_process"); const conf = spawn("dir", { shell: true }); conf.stdout.on("data", async (data) => { process.stdout.write(data); conf.stdin.write("\n"); const input = prompt(""); conf.stdin.write(input); });