Ich kann eine Telnet-Verbindung in Perl keine Probleme einrichten, und habe gerade Curses entdeckt, und frage mich, ob ich die beiden zusammen verwenden kann, um die Ausgabe von der Telnet-Sitzung zu kratzen.
Ich kann den Inhalt von STDOUT auf einer Zeilen-, Spaltenbasis anzeigen, indem ich das folgende einfache Skript verwende:
%Vor%Und mit dem unten genannten kann ich eine Telnet-Verbindung öffnen und \ receive-Befehle ohne Probleme senden:
%Vor%... Aber was ich wirklich gerne tun würde, ist die Telnet-Antwort (die Terminal-Steuerzeichen enthalten wird) und dann auf einer Zeile \ Spaltenbasis mit Fluchen suchen. Kennt jemand eine Art, wie ich die zwei zusammen verbinden kann? Es scheint mir, dass Flüche nur auf STDOUT funktionieren können
Sie suchen nach Term :: VT102 , das ein VT102-Terminal emuliert (das Terminal-Steuerelement wird konvertiert) Zeichen zurück in einen virtuellen Bildschirmzustand). Es gibt ein Beispiel, wie es mit Net :: Telnet in VT102/examples/telnet-usage.pl (das Beispielverzeichnis befindet sich im VT102-Verzeichnis für irgendein Grund).
Es ist ungefähr 7 Jahre her, dass ich dieses System benutzt habe (das System, das ich automatisiert hatte, wurde auf eine webbasierte Oberfläche umgestellt), aber es funktionierte früher.
Flüche macht das Gegenteil. Es ist eine C-Bibliothek zum Optimieren von Bildschirmaktualisierungen von einem Programm, das auf ein Terminal schreibt, das ursprünglich für die Verwendung über eine langsame serielle Verbindung entworfen wurde. Es ist nicht in der Lage, ein Layout aus einer Folge von Steuerzeichen zu entfernen.
Besser wäre ein Terminalemulator, der über eine API verfügt, die diese Art von Screen Scraping ausführen kann. Ich bin mir nicht sicher, ob Open-Source-Terminalemulatoren dies tun, aber es gibt sicherlich kommerzielle, die das können.
Wenn Sie nur mit Nur-Text-Befehlen und -Antworten interagieren, können Sie Expect verwenden um das zu schreiben, sonst können Sie Term :: VT102 verwenden, was Ermöglicht das Scrappen (Lesen bestimmter Bildschirmbereiche, Senden von Text, Behandeln von Ereignissen beim Bildlauf, Cursorbewegungen, Bildschirminhaltänderungen und andere) Anwendungen mit VT102-Escape-Sequenzen für die Bildschirmsteuerung (z. B. eine Anwendung mit der Curses-Bibliothek) / p>
Oder Sie könnten dafür den Befehl script verwenden.
Von der Solaris-Manpage:
BESCHREIBUNG
Das Dienstprogramm
gespeichertscript
zeichnet alle gedruckten Objekte auf auf deinem Bildschirm. Der Datensatz wird in Dateiname geschrieben. Wenn kein Dateiname gegeben ist, wird der Datensatz in der Datei typescript ...Der Skriptbefehl verzweigt und erstellt ein Sub-Shell, nach dem Wert von $ SHELL, und notiert den Text daraus Session. Das Skript endet, wenn der gegabelte Shell verlässt oder wann Control-d ist getippt.
Ich würde auch für die Expect-Antwort stimmen. Ich musste etwas ähnliches aus einer gui'ish-Anwendung machen. Der Trick (wenn auch mühsam), die Steuerzeichen zu umgehen, bestand darin, alle misc-Zeichen von den zurückgegebenen Zeichenfolgen zu entfernen. Es hängt davon ab, wie unordentlich der Bildschirm kratzen wird.
Hier ist meine Funktion von diesem Skript als Beispiel:
%Vor%