Hi,
nun nochmal mein Posting, das erste wurde irgendwie verschluckt...
Sorry für die absolute Newbie-Frage, aber daran verzweifle ich fast, und ich weiß dass es für mein Problem eine einfach Lösung gibt (geben muss ) - ich nur nicht darauf kommen. Wahrscheinlich benutze ich die falsche Funktion oder stelle die Argumente falsch zusammen. Könntet ihr da mal einen Blick drüber werfen?
Also, aus dem Python-Programm rufe ich eine WIN32-exe (conpfad) auf, die 3 Argumente benötigt (Pfad zu config-Datei (inipfad), Ein- und Ausgabedatei (ffc und aafc)).
Bislang habe ich es mit diesem Aufruf probiert:
os.execv(conpfad, [inipfad, fc, afc])
Damit bekomme ich beim Ablauf die Meldung:
Invalid argument : None
danach beendet sich das Programm.
Testweise lasse ich mir eine Zeile vor diesen Aufrufen immer die Variablen ausgeben, die ich der Funktion als Argumente mitgeben, die sind alle korrekt.
Wenn ich die exe jedoch direkt über die Eingabeaufforderung aufrufe, funktioniert alles tadellos. Wo liegt(en) mein(e) Fehler?
Welche Funktion sollte ich benutzen und wie muss ich die Argumente zusammenschreiben?
Danke
LG Corny
Ausführen einer *.exe Datei mit Argumenten
Richtig wäre:Corny hat geschrieben: os.execv(conpfad, [inipfad, fc, afc])
os.execv(conpfad, [conpfad,inipfad, fc, afc])
Das Programm muß in der Argumentenliste nochmal auftauchen.
Die Fehlermeldung kann ich mir nicht recht erklären. Kommt die vielleicht vom Programm, daß du aufrufst?Corny hat geschrieben:Damit bekomme ich beim Ablauf die Meldung:
Invalid argument : None
danach beendet sich das Programm.
joe
Hi,
wieder was gelernt Danke! Kann ich leider aber erst am Montag ausprobieren, da schaue ich auch gleich ob die Fehlermeldung vom Programm kommt (ist vielleicht irgendwo in der Fehlerbehandlung verwurzt, hab ich nicht drauf geachtet, sorry).
Ich melde mich dann wieder.
wieder was gelernt Danke! Kann ich leider aber erst am Montag ausprobieren, da schaue ich auch gleich ob die Fehlermeldung vom Programm kommt (ist vielleicht irgendwo in der Fehlerbehandlung verwurzt, hab ich nicht drauf geachtet, sorry).
Ich melde mich dann wieder.
Danke, hat funktioniert.
Mein Fehler war zusätzlich noch dass ich zweimal den absoluten Pfad zum Programm angegeben habe, das ist aber scheinbar nicht nötig.
So, nun gibts aber schon das nächste Problem...
Das aufgerufene Programm wird korrekt ausgeführt, jedoch wird danach das Pythonscript beendet, d.h. Testprints werden auch nicht mehr ausgegeben.
So sieht es im Code aus:
Als Ausgabe erhalte ich folgendes:
Weiß da noch jemand einen Rat? Muss ich dieses "Taste drücken" unterdrücken, damit Python das Script weiter abarbeitet?
LG Corny
Mein Fehler war zusätzlich noch dass ich zweimal den absoluten Pfad zum Programm angegeben habe, das ist aber scheinbar nicht nötig.
So, nun gibts aber schon das nächste Problem...
Das aufgerufene Programm wird korrekt ausgeführt, jedoch wird danach das Pythonscript beendet, d.h. Testprints werden auch nicht mehr ausgegeben.
So sieht es im Code aus:
Code: Alles auswählen
#XConic mit Config und In-/Outfile starten
os.execv(conpfad, ["ConicBasic.exe",inipfad, ffc, aafc])
print "Test"
(Die ersten Zeilen sind die Ausgabe des aufgerufenen Programms, nach der letzten Zeile "Protokoll: End" muss ich eine Taste zur Bestätigung drücken)X:\__Teams\Conic_Team\Regresstest_V2.0\TestSuite\tests>Protokoll: START CONIC
Protokoll: InFile : X:\__Teams\Conic_Team\Regresstest_V2.0\TestSuite\tests\np-man\untested\PRO.12.V.0323.094137.3251\fi
les\logfiles\Einspool_0222_170951_0448_20.txt
Protokoll: OutFile : X:\__Teams\Conic_Team\Regresstest_V2.0\TestSuite\tests\np-man\untested\PRO.12.V.0323.094137.3251\fi
les\nettoprot\Einspool_0222_170951_0448_2000001.txt.out
Protokoll: Message 1
- Tested
- Converted
Protokoll: File closed
Protokoll: End
X:\__Teams\Conic_Team\Regresstest_V2.0\TestSuite\tests>
Weiß da noch jemand einen Rat? Muss ich dieses "Taste drücken" unterdrücken, damit Python das Script weiter abarbeitet?
LG Corny
Mal die Hilfe befragen:
Der aktuelle Prozess, also der Python-Interpreter, wird mit `exec*()` durch das aufgerufene Programm ersetzt.
Schau Dir mal das Modul 'subprocess' an, damit kann man Programme starten und nachdem sie abgelaufen sind, oder sogar während sie laufen, noch weiter Python-Code laufen lassen.
Code: Alles auswählen
>>> import os
>>> help(os.execv)
Help on built-in function execv in module posix:
execv(...)
execv(path, args)
Execute an executable path with arguments, replacing current process.
path: path of executable file
args: tuple or list of strings
Schau Dir mal das Modul 'subprocess' an, damit kann man Programme starten und nachdem sie abgelaufen sind, oder sogar während sie laufen, noch weiter Python-Code laufen lassen.