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
Eine exe ausführen und Kommandofenster mitlesen
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.
Zu deinem Problem: schau dir mal das Modul subprocess an. Dort die Klasse Popen, die Argumente stdout und stderr sowie die Methode communicate.
-
- User
- Beiträge: 168
- Registriert: Montag 9. Mai 2016, 09:14
- Wohnort: Berlin
Hallo,
unterer Code zeigt eine Möglichkeit wie du auf den Output zugreifen kannst.
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()
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!?
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!?
Habe das jetzt in folgender Form ausprobiert, leider ohne Erfolg.__deets__ hat geschrieben:Du musst jeden Parameter als Element der Liste angeben. Nicht nur Programm trennen vom Rest.
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!?
Danke, komme jetzt an die Ausgabe dran.__deets__ hat geschrieben:Naja liest du denn danach die Ausgabe mit communicate ein?
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?
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.__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.__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?