背景
ANSIエスケープを用いたアプリケーションにSSH接続、
自動実行を行い結果を保存するプログラムを作成したいと思っています。
SSH接続し、コマンドをサーバに投げて出力をPythonで受け取ることまでは実現しましたが、
ANSIエスケープコードを処理した状態で変数もしくはファイルにリダイレクトする方法が分かりません。
こういったことがそもそも実現可能なのか、Pythonでの実装が難しい場合実装可能な言語が無いか、ご教示お願いします。
プログラムの要件
- SSHもしくはシリアルでのサーバ接続
- 切り分けコマンドの発行
- ANSIエスケープコードを含んだ出力を処理、変数に格納
- 戻り値のパターンマッチングによるフィルタ
- DB接続
サンプルコード
Python
1import paramiko 2 3client = paramiko.SSHClient() 4client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 5client.connect('1.1.1.1', username='user', password='piyopiyo') 6 7shell = client.invoke_shell() 8shell.setblocking(False) 9 10print(shell.recv(8192)) 11 12shell.send('app\n') 13#ここからANSIエスケープが発生 14print(shell.recv(8192)) 15 16shell.send('command-1\n') 17print(shell.recv(8192)) 18#ここの戻り値を、ターミナルに表示されたものと同等の形式で格納したい 19・ 20・ 21・ 22・ 23
その、ANSIエスケープを用いたアプリケーション、ってやつの詳細な動作がわからないとどうしようもないですが、そこらへん説明できるでしょうか
> ANSIエスケープコードを含んだ出力を処理、変数に格納
という部分以降がよく分かりません。
たとえばターミナル上で赤や青色でテキストが表示された場合、それらはどのような形式で変数なりに格納したいのでしょうか?
コメントありがとうございます。
1.アプリについて
画面イメージを貼りました。
1行ずつ下に流れていくのではなく、
画面遷移のように見せるアプリです。
カーソル遷移などもANSIで処理しています。
文字間のスペーシングについても、連続したスペースがデータとして送られるわけではなく、ANSIのカーソル情報を使って処理しています。
2.やりたいこと
ANSIで処理している色、太字などの装飾要素はいらないので、テキスト情報だけを格納したい。
ターミナルエミュレータの画面をそのままコピーして出力したい、と言うイメージです。
回答1件
あなたの回答
tips
プレビュー