Python

So verwenden Sie pexpect in Python

So verwenden Sie pexpect in Python

erwartet ist ein beliebtes Python-Modul für verschiedene Arten von automatisierten Aufgaben. Verschiedene Arten von interaktiven Anwendungen wie Telnet, SSH, FTP usw.p., kann mit diesem Modul automatisiert werden. Es ist ein reines Python-Modul und erfordert keinen C-Compiler oder TCL oder Expect-Erweiterungen wie andere erwarten Module. Es kann einfach funktionieren, indem Sie nur einen Python-Interpreter verwenden.  Dieses Modul kann auf zwei Arten verwendet werden. Eine Möglichkeit besteht darin, die Lauf() Funktion, und eine andere Möglichkeit ist zu verwenden laichen Klasse. Das Lauf() Funktion ist einfacher zu bedienen als die Spawn-Klasse und führt die automatisierten Aufgaben schnell aus. Der jeweilige Befehl oder ein Programm kann durch die Lauf() Funktion, die die Ausgabe zurückgibt. Diese Funktion kann alternativ zum os.System() Funktion. Das laichen Klasse ist stärker als die Lauf() Funktion, die ein untergeordnetes Programm erzeugen, mit ihm interagieren kann, indem es Eingaben sendet und auf die Antwort wartet waiting. Dieses Modul ist standardmäßig in Python3 installiert. Die zwei Möglichkeiten, dieses Modul zu verwenden, wurden in diesem Tutorial gezeigt shown.

Verwenden der Funktion run()

Syntax:

Die Syntax der Lauf() Funktion ist unten angegeben.  Es hat viele Argumente für verschiedene Zwecke. Aber die ersten 3 oder 4 Argumente werden meistens verwendet. Das erste Argument dieser Funktion ist obligatorisch und nimmt den Befehl an, den diese Funktion ausführen wird. Es kann mehrere Ausgaben zurückgeben. Wenn die mitAusgangsstatus Argument wird mit dem with verwendet Falsch Wert, wird nur die Ausgabe des Befehls zurückgegeben.

run(command, timeout=30, withexitstatus=False, events=Keine, extra_args=Keine, logfile=Keine, cwd=Keine, env=Keine, **kwargs)

Beispiel-1: Verschiedene Verwendungen der Funktion run()

Drei verschiedene Verwendungen des Lauf() Funktion haben im folgenden Skript gezeigt. Das 'pwd' Die Ausgabe des Befehls wird im ersten ausgeführt Lauf() Funktion, die den aktuellen Arbeitsverzeichnispfad anzeigt. Als nächstes die Lauf() Funktion wird verwendet, um die Details einer bestimmten Datei zu bestimmen, und der Dateiname wird vom Benutzer übernommen. Der dritte Lauf() Funktion wird verwendet, um die ssh Verbindung und rufen Sie alle Dateien und Ordner vom Netz Mappe.

# Pexpect-Modul importieren
Importieren
Importieren von OS
# Einfachen Befehl ausführen
print("Das aktuelle Arbeitsverzeichnis: \n%s" %pexpect.run('pwd').decode("utf-8"))
# Rufen Sie die Informationen einer bestimmten Datei ab
filename = input("Geben Sie einen bestehenden Dateinamen ein: ")
# Überprüfen Sie, ob die Datei vorhanden ist oder nicht
wenn os.Pfad.existiert (Dateiname):
Ausgabe = erwartet.run("ls -l "+Dateiname, withexitstatus=0)
print("Informationen zu einer bestimmten Datei: \n%s" %output.decode("utf-8"))
sonst:
print("Datei existiert nicht.")
# Rufen Sie die Dateien und den Ordner eines bestimmten Verzeichnisses mit dem ssh-Befehl ab
Ausgabe = erwartet.run("ssh [email protected] 'ls web/'", events='(?i)Passwort':'12345\n')
print("\nDie Ausgabe des ssh-Befehls: \n%s" %output.decode("utf-8"))

Ausgabe

Die folgende Ausgabe wird erscheinen, nachdem das obige Skript ausgeführt wurde. In der Ausgabe, doc1.py als Dateiname angegeben hat, und die Details dieser Datei wurden angezeigt. Als nächstes die Liste aller Dateien der Netz Ordner wurde angezeigt mit ssh Verbindung.

Spawn-Klasse verwenden

Die Syntax der Spawn-Klasse ist unten angegeben. Der Konstruktor dieser Klasse kann viele Argumente für viele Zwecke annehmen. Das erste Argument ist obligatorisch, das den Befehl zur Ausführung übernimmt.

class spawn  __init __ (self, command, args=[], timeout=30, maxread=2000, Suchfenstergröße=none, logfile=none, cwd=none, env=none)

Beispiel-2: Einfache Verwendung der Spawn-Klasse

Die einfache Verwendung der Spawn-Klasse hat das folgende Skript gezeigt. Das 'Datum' Befehl wurde hier mit der Spawn-Klasse ausgeführt executed. Die Ausgabe des Befehls wird abgerufen, indem das Objekt der Spawn-Klasse erstellt wird, und die Ausgabe wird in einem für Menschen lesbaren Format gedruckt, indem das . verwendet wird dekodieren() Methode.

# Pexpect-Modul importieren
Importieren
# Führen Sie den Datumsbefehl mit spawn aus
Kind = erwartet.spawn('Datum')
# Untergeordnete Ausgabe lesen, ohne EOFEO zu generieren
Kind.erwarten (erwarten).EOF)
# Speichern Sie den Text, der vom Zeichenfolgenmuster erwartet wird
Ausgabe = Kind.Vor
# Ausgabe drucken
print("Heute ist:", Ausgabe.decode("utf-8"))

Ausgabe

Die folgende Ausgabe wird erscheinen, nachdem das obige Skript ausgeführt wurde.

Beispiel-3: Lesen Sie den Inhalt des Verzeichnisses mit einer ssh-Verbindung

Das Erstellen einer ssh-Verbindung und das Lesen der Liste aller Dateien und Ordner eines bestimmten Verzeichnisses haben im folgenden Skript gezeigt.  Hier wird das Passwort des definierten Benutzers vom Benutzer genommen, um eine SSH-Verbindung mit der Spawn-Klasse herzustellen. Wenn das angegebene Passwort falsch ist, wird das Skript mit einer Fehlermeldung abgebrochen.  Wenn das angegebene Passwort korrekt ist, das Terminal jedoch nicht definiert ist, zeigt das Skript die Erfolgsmeldung für die Verbindung an, sendet den Terminaltyp und definiert das erwartete Muster der Eingabeaufforderung. Wenn das Passwort korrekt und das Terminal definiert ist, zeigt das Skript die Erfolgsmeldung und die Shell-Eingabeaufforderung an.

# Pexpect-Modul importieren
Importieren
# Legen Sie den Benutzernamen für die SSH-Verbindung fest
Benutzername = '[email protected]'
# Ein gültiges Passwort vom Benutzer nehmen
Password = input("Geben Sie das Login-Passwort von %s ein: " %username)
# Führen Sie den ssh-Befehl mit spawn aus
Kind = erwartet.spawn('ssh' + Benutzername)
# Warte auf das Passwort
Kind.erwarten('Passwort:')
# Das vom Benutzer übernommene Passwort senden
Kind.sendline(Passwort)
# Drei Ausgaben erwartet
ich = Kind.erwarten (['Berechtigung verweigert', 'Terminaltyp', '[#\$] '])
# ich werde 0 sein, wenn ssh keine Verbindung herstellen kann
wenn ich == 0:
print("Berechtigung vom Host verweigert. Anmeldung nicht möglich")
Kind.töten(0)
# Ich werde 1 sein, wenn ssh eine Verbindung herstellen kann, aber das Terminal nicht eingestellt ist
elif ich == 1:
print('Erfolgreich verbunden.\nTerminaltyp ist nicht eingestellt.')
Kind.sendline('vt100')
Kind.erwarten('[#\$]')
# ich werde 2 sein, wenn ssh eine Verbindung herstellen kann und das Terminal eingestellt ist
elif ich == 2:
print('Erfolgreich verbunden.')
Aufforderung = Kind.nach dem
print('Shell-Eingabeaufforderung:', Eingabeaufforderung.decode("utf-8"))

Ausgabe

Die folgende Ausgabe erscheint, wenn das obige Skript mit dem falschen Passwort ausgeführt wird.

Die folgende Ausgabe erscheint, wenn das obige Skript mit dem richtigen Passwort ausgeführt wird.

Fazit

pexpect ist ein sehr hilfreiches Modul für Python-Benutzer, das ihnen hilft, ihre regulären Aufgaben automatisch zu erledigen. Die sehr grundlegenden Anwendungen des pexpect-Moduls von Python wurden in diesem Tutorial anhand einfacher Beispiele beschrieben, um den Benutzern zu helfen, mit diesem Modul zu arbeiten.

Beste Befehlszeilenspiele für Linux
Die Befehlszeile ist nicht nur Ihr größter Verbündeter bei der Verwendung von Linux – sie kann auch eine Quelle der Unterhaltung sein, da Sie damit vi...
Beste Gamepad-Mapping-Apps für Linux
Wenn du Spiele unter Linux gerne mit einem Gamepad statt mit einem typischen Tastatur- und Maus-Eingabesystem spielst, gibt es einige nützliche Apps f...
Nützliche Tools für Linux-Spieler
Wenn Sie gerne unter Linux spielen, haben Sie wahrscheinlich Apps und Dienstprogramme wie Wine, Lutris und OBS Studio verwendet, um das Spielerlebnis ...