画面ログをhtmlに変換

画面ログをhtmlに変換

ターミナルウィンドウで行われた操作を記録し、すぐにログをhtmlに変換したいと思います。

私はコマンドスクリプト/画面を試しました+ansi2htmlしかし、結果は完璧ではありません。行を編集するためのエスケープシーケンスは正しく処理されないため、生成されたHTMLには古いバージョンと新しいバージョンの行が混在しています。したがって、端末の出力が次のような場合

$> echo Original text
Original text
$> echo Other
Other

生成されたHTML

$>元のテキストをエコーし​​ます。
 オリジナル
 $>他のテキストをエコーし​​ます。
 その他

この問題を解決する方法についてのアイデアはありますか?

ベストアンサー1

問題は、Perlスクリプト(不要)ではなくansi2html不完全であるということです。

ログファイルにはテキストの印刷内容が表示され、

  • 行の残りの部分を消去するには、エスケープシーケンスの追加を繰り返します。\E[K
  • またはバックスペースキーを追加してください。

で、ansi2htmlスクリプトはエスケープシーケンスを見つけ、見つかったすべてのエスケープシーケンスを無視します(一部を除く)。

self.ansi_codes_prog = re.compile('\033\\\[' '(\[\\d;\]*)' '(\[a-zA-z\])')

if command not in 'mMA':

ループから重複したアイテムを削除するのが最も簡単です。ansi2htmlあなたの例で問題を解決する代替スクリプトは次のとおりです。

#!/usr/bin/perl -w

while (<>) {
    my $save = "";
    while ( $save ne $_ ) {
        $save = $_;
        s/[^\010]\010\e\[K//;
    }
    $save = "";
    while ( $save ne $_ ) {
        $save = $_;
        s/[^\010]\010//;
    }
    s/\e\[\?[;0-9]*[\100-\176]//g;
    s/\e\][^\a]*\a//g;
    print;
}

そして(と呼んでくださいfilterit)次のように使用してください:

./filterit < 1.log | ansi2html >1.html

おすすめ記事