Wie kann ich die Ausgabe von Telnet in Perl screenen?

8

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

    
Mike Atkinson 10.02.2010, 10:55
quelle

6 Antworten

3

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.

    
cjm 10.02.2010, 18:00
quelle
5

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.

    
quelle
4

Wahrscheinlich möchten Sie etwas wie Expect

%Vor%     
Vinko Vrsalovic 10.02.2010 10:58
quelle
3

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>     

MkV 10.02.2010 18:01
quelle
1

Oder Sie könnten dafür den Befehl script verwenden.

Von der Solaris-Manpage:

  

BESCHREIBUNG

     

Das Dienstprogramm script 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 ...

gespeichert      

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.

    
Nick Dixon 10.02.2010 11:07
quelle
0

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%     
Bill 10.02.2010 23:53
quelle

Tags und Links