NodeJS child_process ansi в stdout - PullRequest
       9

NodeJS child_process ansi в stdout

0 голосов
/ 24 февраля 2019

Я хочу получить что-то вроде

[06:32:35] [Server thread/INFO]: [0;36;1m  |    [0;36;22m|__)   [0;32;22mLuckPerms [0;36;1mv4.3.73[m
[06:32:35] [Server thread/INFO]: [0;36;1m  |___ [0;36;22m|      [0;30;1mRunning on Bukkit - CraftBukkit[m

, но я получаю

[06:05:02] [Server thread/INFO]:   |    |__)   LuckPerms v4.3.73
[06:05:02] [Server thread/INFO]:   |___ |      Running on Bukkit - CraftBukkit

При запуске сервера minecraft с использованием child_process

prcs.stdout.on("data", function(d) {
    console.log(d.toString());
});

1 Ответ

0 голосов
/ 24 февраля 2019

Не зная точно, как формируется d, вот что соответствует вашему примеру, возможно, не совсем так, как вам нужно, но вы всегда можете попробовать обновить его (и, по крайней мере, оно не требует никакой зависимости):

const versionRegExp = /v[0-9]+(\.[0-9]+)*$/;
d.toString().split("\n").forEach((line) => {
  // no idea what the spaces are made of
  const exploded = line.trim().split(/[ \t]+/);
  // add paddings to the first two structures
  const first = exploded.shift().padEnd(5, ' ');
  const second = exploded.shift().padEnd(7, ' ');
  // work out the content
  // condition based on `second`, or should it be remainder.match(versionRegExp) ?
  const remainder = 0 === second.indexOf('|__)')
    ? `[0;30;1m${exploded.join(' ').replace(versionRegExp, '[0;36;1m$&')}[m`
    : `[0;32;22m${exploded.join(' ')}[m`
  ;
  // format line and display
  console.log(`[0;36;1m${first}[0;36;22m${second}${remainder}`);
});
...