Frage zu IPS_Execute ausführen von Python Skript unter Windows

Ich würde gerne ein Python Skript aus IP-Symcon heraus ausführen. Dazu würde ich gerne IPS_Execute oder shell_exec nutzten.

Wenn ich in Windows cmd aufmache, dann in das passende Verzeichnis wechsel und dann im Verzeichnis eingebe


python scriptname

wird das Script mit dem dem Namen scriptname ausgeführt.

Wie starte ich nun dieses Skript unter Windows aus IP-Symcon heraus, dazu muss ich ja mit einem Befehl in das Verzeichnis wechseln und das Skript ausführen?

Könnte mir jemand hier ein Beispiel geben wie das funktioniert?

Moin Fonzo,

auf die Schnelle ein paar Beispiele da ich gleich weg muss :slight_smile:

// Die kcd_-Befehle können direkt mit eval() ausgeführt werden
define ("kcd_killHWiNFO64", "passthru('C:/Windows/System32/taskkill.exe /im HWiNFO64.exe /f > nul');");
define ("kcd_startHWiNFO64", "IPS_ExecuteEX('C:/IP-Symcon/media/HWiNFO64_Start.bat', '', true, false, -1);");
define ("kcd_killIE", "passthru('C:/Windows/System32/taskkill.exe /im iexplore.exe /f > nul');");
define ("kcd_killFF", "passthru('C:/Windows/System32/taskkill.exe /im firefox.exe /f > nul');");
define ("kcd_killIPSView", "passthru('C:/Windows/System32/taskkill.exe /im IPSViewClient.exe /f > nul');");
define ("kcd_killPHT", "passthru('C:/Windows/System32/taskkill.exe /im \"Plex Home Theater.exe\" /f > nul');");
define ("kcd_killPMS", "passthru('C:/Windows/System32/taskkill.exe /im \"Plex Media Server.exe\" /f > nul');");
define ("kcd_killVLC", "passthru('C:/Windows/System32/taskkill.exe /im vlc.exe /f > nul');");

define ("kcd_saveVBox", "IPS_ExecuteEX('C:/Program Files/Oracle/VirtualBox/VBoxManage.exe', 'controlvm JohannesSuse savestate', true, false, -1);");
define ("kcd_startVBox", "IPS_ExecuteEX('C:/Program Files/Oracle/VirtualBox/VBoxManage.exe', 'startvm JohannesSuse --type headless', true, false, -1);");
define ("kcd_startIPSView", "IPS_ExecuteEX('C:/IPSView/IPSViewClient.exe', '', true, false, -1);");
define ("kcd_startPMS", "IPS_ExecuteEX('C:/Program Files (x86)/Plex/Plex Media Server/Plex Media Server.exe', '', true, false, -1);");
define ("kcd_startPHT", "IPS_ExecuteEX('C:/Program Files (x86)/Plex Home Theater/Plex Home Theater.exe', '', true, false, -1);");

define ("kcd_stopIPSServer", "passthru('C:/Windows/System32/net stop IPSServer');");

Diese Befehle werden dann direkt mit eval ausgeführt. Darauf kann man verzichten, dann müssen allerdings die / in den Pfaden durch \ ersetzt werden. Bei komplexeren Abläufen wie z. B. mit AutoIt benötigt man eine Batchdatei um die AutoIt.exe ausführen zu können. Um die Lüfterdrehzahl und Temperatur des PCs zu ermitteln nutze ich HWiNFO64, welches dann über AutoIt eingebunden wird.

Ich hoffe, dass dir das erstmal hilft :wink:

Gruß
Hans

Nun ich habe das Problem, das ich die Ausgabe der Shell brauche und mit IPS_ExecuteEx bekomme ich ja nichts zurück.
Also muss ich wohl shell_exec nutzten um an die Ausgabe zu kommen.

Auf einem Raspberry kann ich einfach pythonscriptname eingeben, egal wo ich im Verzeichnisbaum bin und das Skript wird ausgeführt. Unter Windows muss ich dazu in den Ordner wechseln, unter der das Skript liegt, um es dann mit python pythonscriptname zu starten. Gibt es irgendeine Möglichkeit das dies eventuell in Windows auch funktioniert wie auf einem Raspberry das ich nicht spezifisch in das Verzeichnis wechseln muss?

Oder ist die einzige Möglichkeit einen bat Datei zu erstellen und diese dann aus IP-Symcon aufzurufen?

Hallo Fonzo,

bin gerade wieder zurückgekommen.

Du musst doch gar keinen Pfad wechseln :frowning: Gib den Pfad doch direkt wie in den Beispielen an. Bei Virtual Box habe ich auch nur den Pfad angegeben. Du kannst aber auch in Windows mit der Pfad Anweisung deinen Python Pfad permanent hinterlegen, was aber nicht notwendig ist :slight_smile:

Wenn du eine Ausgabe von dem Aufruf zurückbekommst könntest du versuchen, diese in eine Datei umzuleiten, die du dann anschließend einliest. Das könnte mit „python scriptname > Ausgabe.txt“ funktionieren. Einfach mal ausprobieren :wink:

Gruß
Hans

Ich hab das jetzt mit einen Bat Datei und einen shell_exec Aufruf gelöst das geht und ich bekomme das Ergebnis nach IPS.


$result = shell_exec("D:/Broadlink/broadlink_discovery.bat");
print_r($result);

Na super, man sieht, viele Wege führen nach Rom :slight_smile:
Gruß
Hans