Was mich betrifft, ich finde tcl ja nicht so meine Programmiersprache. Deswegen würde ich das lieber mit PHP machen wollen. Dazu müsste man dann eine PHP-Extension installieren und dann geht das auch in PHP.
Hier mal ein kurzes Beispiel, für ein Fragment aus einem Script, dass eine dialogbasierte, seriell angeschlossene APC(Stromverteiler) steuert.
Code: Alles auswählen
<?php
ini_set("expect.timeout", -1);
ini_set("expect.loguser", "Off"); # -- this disables output - comment out to view output
$apc_host = "mein.server.de";
$apc_port = "12001";
$apc_user = "apc";
$apc_pass = "apc";
$password = $user ="";
function my_log($msg) { print(date(time())." : ".$msg."\n"); }
function login($stream,$user,$pass) {
fwrite($stream,"\n");
while(true) {
switch (expect_expectl($stream,array(
array("Password :","PASSWORD"),
array("User Name :","USER"),
array("1- Device Manager.*2- Network.*3- System.*4- Logout.*> ","MAINMENU",EXP_REGEXP),
))) {
case "USER":
my_log("User prompt detected");
fwrite ($stream, "$user\n");
break;
case "PASSWORD":
my_log("Password prompt detected");
fwrite ($stream, "$pass\n");
break;
case "MAINMENU":
my_log("Main Menu detected");
break 2;
}
}
}
$stream = expect_popen("telnet $apc_host $apc_port");
login($stream,$apc_user,$apc_pass);
power_cycle($stream,$argv[1]); # Diese Funktion fehlt hier
Anmerkungen
Diesen speziellen Stromverteiler kann man auch per SNMP ansteuern, nur leider fällt das LAN-Modul gelegentlich mal aus, was einen dann doch wieder auf die Konsole zurückwirft. Im übrigen ist dieses Gerät maximal unsicher, da 10 Jahre alt und mit einem im Internet erhältlichen Code über das LAN zurücksetzbar ist. Also definitiv nix, was am ungesicherten Internet betreiben möchte. Weil's praktisch ist, erwähne ich auch gleich nochmal
ser2net, das es erlaubt eine serielle Konsole auf einen Netzwerkport weiterzuleiten.