字符串解析不正确

Improper parsing of strings

本文关键字:不正确 字符串      更新时间:2023-09-26

我正在尝试将控制台输出的ansi颜色代码转换为HTML。我找到了一个脚本来做这件事,但我似乎无法让它解析nodejs中的字符串。我尝试过将其JSON.stringify以包含特殊字符,但它不起作用。

forever list
[32minfo[39m:    Forever processes running
[90mscript[39m           [37mforever[39m [37mpid[39m  [37mid[39m
[90mdata[39m:    [37m   [39m  [37muid[39m  [90mcommand[39m                                   

我从节点js中的ssh2shell得到这样的输出。我有一个脚本:https://github.com/pixelb/scripts/blob/master/scripts/ansi2html.sh

这应该将以上内容转换为html并添加适当的颜色代码。它与正常的终端输出配合良好,例如:

npm install --color=always | ansi2html.sh > npminstall.html

这是linux机器上通过管道传输到文件的原始输出。当JS字符串显示在console.log中时,它们似乎缺少这些转义符,但它们也缺少换行符。也许是因为我将它们直接连接到字符串中,并删除了特殊字符?

total 24
-rwxr-xr-x 1 admin admin 17002 May 13 02:52 ^[[0m^[[38;5;34mansi2html.sh^[[0m
drwxr-xr-x 4 admin admin  4096 May 13 00:00 ^[[38;5;27mgit^[[0m
-rw-r--r-- 1 admin admin     0 May 13 02:57 ls.html

希望这其中有些道理。

感谢

SSH2shell对命令的输出应用了几个过滤器。首先从响应中删除非标准ASCII,然后删除彩色格式代码。

在v1.6.0中,我添加了pipe()/unpipe(),用于两者的事件,并公开了stream.on('data',function(data){})事件,因此您可以直接访问流输出,而无需SSH2shell以任何方式与其交互。这应该通过允许您访问原始数据来解决无法从SSH2shell获得正确输出的问题。

var fs = require('fs')
var host = {
  server:             {     
    host:         mydomain.com,
    port:         22,
    userName:     user,
    password:     password:)
  },
  commands:           [
    "`Test session text message: passed`",
    "msg:console test notification: passed",
    "ls -la"
  ],
}
//until npm published use the cloned dir path.
var SSH2Shell = require ('ssh2shell')
//run the commands in the shell session
var SSH = new SSH2Shell(host),
    callback = function( sessionText ){
          console.log ( "-----Callback session text:'n" + sessionText);
          console.log ( "-----Callback end" );
      },
    firstLog = fs.createWriteStream('first.log'),
    secondLog = fs.createWriteStream('second.log'),
    buffer = ""
//multiple pipes can be added but they wont be bound to the stream until the connection is established    
SSH.pipe(firstLog).pipe(secondLog);    
SSH.on('data', function(data){
    //do something with the data chunk
    console.log(data)
})
SSH.connect(callback)

尝试过这个吗?

https://github.com/hughsk/ansi-html-stream

var spawn = require('child_process').spawn
  , ansi = require('ansi-html-stream')
  , fs = require('fs')
var npm = spawn('npm', ['install', 'browserify', '--color', 'always'], {
    cwd: process.cwd()
})
var stream = ansi({ chunked: false })
  , file = fs.createWriteStream('browserify.html', 'utf8')
npm.stdout.pipe(stream)
npm.stderr.pipe(stream)
stream.pipe(file, { end: false })
stream.once('end', function() {
  file.end('</pre>'n')
})
file.write('<pre>'n');