Одновременный ввод и вывод в NodeJS - PullRequest
3 голосов
/ 14 июля 2020

Итак, я пытаюсь создать сценарий на NodeJS, который может получать вывод из порожденного дочернего процесса и выводить его на консоль, а также принимать ввод от пользователя и отправлять его дочернему процессу и нажимать ввод. В настоящее время у меня есть эта настройка:

function log(data) {
  process.stdout.write(data.toString())
}

childProcess.stdout.on('data', log)
childProcess.stderr.on('data', log)

let rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

rl.question("Command>> ", cmd => {
  childProcess.stdin.write(cmd + '\n')
})

Но если я не дам ему ответа к тому времени, когда дочерний процесс даст свой первый результат, он регистрирует, где находится мой курсор: на вопросе. Я также хотел бы, чтобы приглашение ввода оставалось внизу, если это возможно, но это не слишком важно.

Как мне go это сделать? Любая помощь приветствуется, спасибо!

1 Ответ

0 голосов
/ 17 июля 2020

Итак, благодаря комментарию от @Bergi, я внимательно изучил readline и нашел к нему другой подход. Вот что я сделал:

function log(data) {
  readline.cursorTo(process.stdout, 0, process.stdout.rows + 1)
  process.stdout.write(data.toString())
}

childProcess.stdout.on('data', log)
childProcess.stderr.on('data', log)

let rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout,
  prompt: ''
})

rl.on('line', (line) => {
  childProcess.stdin.write(line.trim() + '\n')
  rl.prompt()
})

Признаюсь, не самое лучшее, но это все, что мне нужно :) Спасибо, Берги!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...