Командная строка и связь Node.js (без закрытия) - PullRequest
0 голосов
/ 18 октября 2019

Я просматривал документацию , но не могу найти способ передать команды в командную строку (cmd.exe), не закрывая ее в конце. Как я могу передать командную строку «непрерывно»?

Я заметил функцию fork, но, похоже, она работает только для модулей node.js ..

const { spawn } = require('child_process');
const ls = spawn('C:\\Windows\\System32\\cmd', ['/c', 'echo hello']);

ls.stdout.on('data', (data) => {
  console.log(`stdout: ${data}`);
});

ls.stderr.on('data', (data) => {
  console.log(`stderr: ${data}`);
});

ls.on('close', (code) => {
  console.log(`child process exited with code ${code}`);
});

Результат:

stdout: hello

child process exited with code 0 // I dont want it to exit yet!

Ответы [ 2 ]

0 голосов
/ 19 октября 2019

Это довольно тривиально в конце. Просто создайте программу и запишите ее stdin:

const { spawn } = require('child_process');
const child = spawn('C:\\Windows\\System32\\cmd.exe');

child.stdin.write('echo IM BACK\n');

child.stdout.on('data', (data) => {
    console.log(`command line says:\n${data}`);
});

:

c:\Users\...\03 cmd.exe communcation>
command line says:
echo IM BACK
IM BACK

можно также добавить 'echo off'

0 голосов
/ 19 октября 2019

Вы можете добавить их динамически (с помощью адаптера, который собирает все данные и затем запускает реальный скрипт).

walrus можно заменить условием, когда вы хотите остановить слушателя

const stdin = process.openStdin();

stdin.addListener("data", function(data) {
    let str = data.toString().trim();
    console.log(str);

    if ("walrus" === str){
        stdin.removeAllListeners('data');
    }
});
...