Exec: Unterschied zwischen den Versionen
TeraX (Diskussion | Beiträge) K (1 Version) |
|
(kein Unterschied)
|
Aktuelle Version vom 7. November 2013, 21:54 Uhr
Inhaltsverzeichnis
Exec()
Offiziell dokumentiert: Nein
Mit system.Exec lassen sich beliebige Prozesse auf der HomeMatic Zentrale starten.
ACHTUNG: Bei system.Exec handelt es sich gleichzeitig um einen der nützlichsten und einen der gefährlichsten undokumentierten HomeMatic Script Aufrufe. So kann eine falsche Verwendung schnell dazu führen, dass sich die Logikschicht (ReGaHss) der HomeMatic Zentrale aufhängt. Daher sind folgende Regeln unbedingt zu beachten:
- die Parameter stdout und stderr sind stets anzugeben
- Es sollte unter allen Umständen vermieden werden dass mehrere system.Exec gleichzeitig ablaufen. (Im Script vor Ausführen des system.exec() eine Systemvariable setzen, danach rücksetzen, und diese vor Ausführen des Scripts abfragen.)
- Man sollte insgesamt "sparsam" mit system.Exec umgehen und die Aufrufe auf das notwendigste Beschränken.
Ein Weg die Probleme mit system.Exec zu umgehen ist die Nutzung der Zusatzsoftware "CUxD", damit können beliebige Prozesse ohne den Einsatz von system.Exec gestartet werden.
Parameter
- string
die Kommandozeile des zu startenden Prozesses inklusive aller Parameter (ein bekannter Fehler erfordert u.U. Kapselung in extra Shell-Prozess wenn mehr als 8 Parameter übergeben werden sollen [[1]])
- &string
eine Referenz auf die Standard-Ausgabe
- &string
eine Referenz auf die Standard-Fehlerausgabe
Rückgabewert
Beispiel
dieses Beispiel zeigt die Ausgabe des Befehls "uptime" an.
string cmdline = "/usr/bin/uptime"; string stdout; string stderr; system.Exec(cmdline, &stdout, &stderr); Write(stdout);
Siehe auch
http://homematic-forum.de/forum/viewtopic.php?f=26&t=11181
Objekte
system