Mit LC.expect
können Programme ausgeführt und „ferngesteuert“ werden. Die Ausgabe des aufgerufenen Programmes wird ausgelesen, und bei Erkennung von bestimmten Mustern Funktionen ausgeführt.
Ein häufiger Anwendungsfall ist der Aufruf eines Programmes zum Ändern von Passwörtern: es muss auf eine bestimmte Eingabeaufforderung gewartet werden (z.B. „Enter new password:“), und anschließend das neue Passwort gesendet werden.
LC.expect
arbeitet objekt- und eventorientiert. Zuerst wird ein LC.expect
-Objekt erstellt, dann mit spawn()
das gewünschte Programm ausgeführt, und mit expect()
und send()
auf Ausgaben gewartet bzw. Daten gesendet.
LC.expect.
new
(command)¶
neues LC.expect
-Objekt
Erstellt ein neues LC.expect
-Objekt.
LC.expect.
expect
(list, timeout)¶
list (String) – Muster nach denen in der Ausgabe gesucht werden sollen
timeout (Number) – Zeit nach der die Ausführung des Programmes abgebrochen wird
Wartet auf die in list
angegebenen Muster, bricht nach maximal timeout
Sekunden ab.
Die Liste ist ein Array mit aus match
- und action
-Einträgen bestehenden Tabellen. In match
ist jeweils ein regulärer Ausdruck angegeben, auf den die empfangene Programmausgabe überprüft wird, und action
ist eine Funktion, die bei einem Treffer jeweils aufgerufen wird.
Die Handler-Funktion (action
) bekommt als Parameter ein Array mit allen im regulären Ausdruck erkannten Mustern. Der erste Eintrag enthält das vollständige erkannte Muster, alle weiteren Einträge eventuelle Suchausdrücke.
LC.expect.
log
(enable)¶
enable (Boolean) – Status protokollieren
Detailliertes Protokoll aktivieren/deaktivieren
LC.expect.
logfile
(filename)¶
filename (String) – Name der Protokolldatei
Datei für Protokollausgabe festlegen
LC.expect.
send
(string)¶
string (String) – Zu sendende Zeichenkette
Sendet die in string
angegebenen Daten an das laufende Programm.
LC.expect.
spawn
(program, args)¶
program (String) – auszuführendes Programm
args (Array) – Parameter
Führe das Programm program
mit den im Array args
angegebenen Parametern aus.
Example
e = LC.expect.new()
successful = false
e:log(true)
e:logfile("expect_test.log")
-- change password for user 'johndoe'
e:spawn("/usr/bin/passwd", { "johndoe" } )
function send_password(m)
-- send new password (with '\n' at the end!)
e:send("PaSsWoRd\n")
end
function pwd_success(m)
successful = true
end
list = {
{ match = "new UNIX password:",
action = send_password },
{ match = "updated successfully",
action = pwd_success }
}
e:expect(list, 5)
if (successful) then
print("Successful.")
else
print("NOT successful.")
end