Seite 1 von 1
Eine exe ausführen und Kommandofenster mitlesen
Verfasst: Dienstag 14. November 2017, 11:22
von grpy
Hallo zusammen,
ich möchte aus Python eine Anwendung (.exe) mit Parametern starten. Diese Anwendung öffnet ein Kommandofenster und schreibt den Status des Programms rein. Diesen Status muss ich mitlesen und anschließend auswerten. Die .exe kann ich leider nicht bearbeiten.
Mein Code ist schon soweit, dass die Anwendung gestartet wird. Komme jetzt aber nicht weiter. Hat jemand vielleicht eine Idee? :K
code:
import os as __os
a = "start C:\Users\Desktop\Loader\PC_Loader.exe FILE:C:\Users\Desktop\Build\Output\bsp.trf CAN:CANLight_USB_16 TXID:0x01 RXID:0x02"
b = __os.popen(a,'r',-1)
return
Re: Eine exe ausführen und Kommandofenster mitlesen
Verfasst: Dienstag 14. November 2017, 11:36
von __deets__
Bitte gewöhn dir diesen Doppelunterstrichimportunsinn ab. Das macht man nicht. Wenn du die von einem Modul exportierten Namen kontrollieren willst, gibt es dafür __all__.
Zu deinem Problem: schau dir mal das Modul subprocess an. Dort die Klasse Popen, die Argumente stdout und stderr sowie die Methode communicate.
Re: Eine exe ausführen und Kommandofenster mitlesen
Verfasst: Dienstag 14. November 2017, 11:37
von sebastian0202
Hallo,
unterer Code zeigt eine Möglichkeit wie du auf den Output zugreifen kannst.
Code: Alles auswählen
import subprocess
process = subprocess.Popen(['ls','-l'], stdout=subprocess.PIPE)
output = process.stdout.read()
Re: Eine exe ausführen und Kommandofenster mitlesen
Verfasst: Dienstag 14. November 2017, 14:36
von grpy
danke für die schnellen Antworten.
Ich hab mich schon an subprocess.Popen versucht, kriege es aber nicht hin korrekt aufzurufen.
process = subprocess.Popen(['C:\Users\Desktop\Loader\PC_Loader.exe','FILE:C:\Users\Desktop\Build\Output\bsp.trf CAN:CANLight_USB_16 TXID:0x01 RXID:0x02'], stdout=subprocess.PIPE)
Die exe wird gestartet aber die Parameter scheinen zu fehlen!?
Re: Eine exe ausführen und Kommandofenster mitlesen
Verfasst: Dienstag 14. November 2017, 15:05
von __deets__
Du musst jeden Parameter als Element der Liste angeben. Nicht nur Programm trennen vom Rest.
Re: Eine exe ausführen und Kommandofenster mitlesen
Verfasst: Dienstag 14. November 2017, 15:21
von grpy
__deets__ hat geschrieben:Du musst jeden Parameter als Element der Liste angeben. Nicht nur Programm trennen vom Rest.
Habe das jetzt in folgender Form ausprobiert, leider ohne Erfolg.
process = subprocess.Popen(['C:\Users\Desktop\Loader\PC_Loader.exe','FILE:C:\Users\Desktop\Build\Output\bsp.trf','CAN:CANLight_USB_16','TXID:0x01','RXID:0x02'], stdout=subprocess.PIPE)
Das Problem scheint sogar noch an einer anderen Stelle zu sein, da das geöffnete Kommandofenster leer bleibt und wenn die exe manuell ausgeführt wird, das nicht der Fall ist!?
Re: Eine exe ausführen und Kommandofenster mitlesen
Verfasst: Mittwoch 15. November 2017, 01:08
von __deets__
Naja liest du denn danach die Ausgabe mit communicate ein?
Re: Eine exe ausführen und Kommandofenster mitlesen
Verfasst: Mittwoch 15. November 2017, 11:17
von grpy
__deets__ hat geschrieben:Naja liest du denn danach die Ausgabe mit communicate ein?
Danke, komme jetzt an die Ausgabe dran.
Jetzt habe ich das nächste Problem, das ich mit meiem ersten Ansatz (os.popen) nicht hatte.
Mit subprocess.popen bekommt das durch die exe aufgerufene Programm keine Verbindung zum CAN-Interface, das in die Umgebung eingebunden ist. Aus dieser Umgebung wird das Python-Skript aufgerufen, dass dann die exe aufruft.
Wie könnte ich das Problem lösen?
Re: Eine exe ausführen und Kommandofenster mitlesen
Verfasst: Mittwoch 15. November 2017, 11:25
von __deets__
Kann ich mir so ohne weiteres erstmal nicht erklären. Kannst du das mal etwas detaillierter beschreiben was da wie ineinander greift?
Re: Eine exe ausführen und Kommandofenster mitlesen
Verfasst: Mittwoch 15. November 2017, 12:10
von grpy
__deets__ hat geschrieben:Kann ich mir so ohne weiteres erstmal nicht erklären. Kannst du das mal etwas detaillierter beschreiben was da wie ineinander greift?
Testautomatisierungs-Software (ECU-TEST Fa. tracetronik), mit eingebundenen CAN-Interface. In diesem Tool wird das Python-Skript ausgeführt. Das Python-Skript ruft dann die exe auf. Das durch die exe gestartete Programm greift dann auf das CAN-Interface zu und kommuniziert mit einem anderen CAN-Teilnehmer.
Re: Eine exe ausführen und Kommandofenster mitlesen
Verfasst: Mittwoch 15. November 2017, 12:29
von grpy
__deets__ hat geschrieben:Kann ich mir so ohne weiteres erstmal nicht erklären. Kannst du das mal etwas detaillierter beschreiben was da wie ineinander greift?
Hat sich erledigt, hab den Fehler gefunden. Bei einem der Parameter fehlte ein Zeichen. Danke für die Unterstützung.