Stdout для появления узла при недоступности данных при запуске из командной строки - PullRequest
0 голосов
/ 02 ноября 2019

Когда приведенный ниже код запускается с использованием кода VS из боковой панели Mocha, он отлично работает. Однако при запуске из командной строки кажется, что sh.stdout.on ('data' ..) достигается только при первом запуске, но не после повторного запуска. Он будет запущен только один раз, если будет запущен новый терминал. В test.js:

const {spawn} = require('child_process')

const rootF = new Promise(resolve => {
  const sh = spawn('/bin/sh', undefined, {
    stdio: ['pipe', 'pipe', 'pipe']
  })
  sh.stdout.on('data', data => {
    const dataStr = data.toString()
    console.log(dataStr)
    if (dataStr === 'password') {
      sh.stdin.write('ROOTPASSWORD\n')
      sh.stdin.write('whoami;\n')
    } else {
      resolve(dataStr)
    }
  })
  sh.on('close', code => console.log(`process exited with code ${code}`))
  sh.stdin.write('sudo -p password -S su root 2>&1 ;\n')
  console.log('SUDO SENT')
})

;(async () => {
  console.log('BEFORE')
  await rootF
  console.log('AFTER')
  process.exit()
})()

Используемая команда:

node test.js

Узел v 12.11.1 также Узел v 13.0.1

Он также появляется, если кто-то просто ждетВ течение долгого времени команда может быть запущена повторно, и она будет работать - так что некоторая фоновая очистка устраняет причину.

Есть идеи о возможных причинах?

...