Eine exe ausführen und Kommandofenster mitlesen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
grpy
User
Beiträge: 6
Registriert: Dienstag 14. November 2017, 10:43

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
__deets__
User
Beiträge: 14536
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
sebastian0202
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.

Code: Alles auswählen


import subprocess

process = subprocess.Popen(['ls','-l'], stdout=subprocess.PIPE)
output = process.stdout.read()

grpy
User
Beiträge: 6
Registriert: Dienstag 14. November 2017, 10:43

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!?
__deets__
User
Beiträge: 14536
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du musst jeden Parameter als Element der Liste angeben. Nicht nur Programm trennen vom Rest.
grpy
User
Beiträge: 6
Registriert: Dienstag 14. November 2017, 10:43

__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!?
__deets__
User
Beiträge: 14536
Registriert: Mittwoch 14. Oktober 2015, 14:29

Naja liest du denn danach die Ausgabe mit communicate ein?
grpy
User
Beiträge: 6
Registriert: Dienstag 14. November 2017, 10:43

__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?
__deets__
User
Beiträge: 14536
Registriert: Mittwoch 14. Oktober 2015, 14:29

Kann ich mir so ohne weiteres erstmal nicht erklären. Kannst du das mal etwas detaillierter beschreiben was da wie ineinander greift?
grpy
User
Beiträge: 6
Registriert: Dienstag 14. November 2017, 10:43

__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.
grpy
User
Beiträge: 6
Registriert: Dienstag 14. November 2017, 10:43

__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.
Antworten