Seite 1 von 1

Ausführen einer *.exe Datei mit Argumenten

Verfasst: Freitag 18. Februar 2005, 11:22
von Corny
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 :D) - 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

Re: Ausführen einer *.exe Datei mit Argumenten

Verfasst: Freitag 18. Februar 2005, 18:04
von joe
Corny hat geschrieben: os.execv(conpfad, [inipfad, fc, afc])
Richtig wäre:
os.execv(conpfad, [conpfad,inipfad, fc, afc])
Das Programm muß in der Argumentenliste nochmal auftauchen.
Corny hat geschrieben:Damit bekomme ich beim Ablauf die Meldung:
Invalid argument : None
danach beendet sich das Programm.
Die Fehlermeldung kann ich mir nicht recht erklären. Kommt die vielleicht vom Programm, daß du aufrufst?
joe

Verfasst: Freitag 18. Februar 2005, 23:50
von Corny
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.

Verfasst: Dienstag 22. Februar 2005, 17:22
von Gast
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:

Code: Alles auswählen

#XConic mit Config und In-/Outfile starten
os.execv(conpfad, ["ConicBasic.exe",inipfad, ffc, aafc])
print "Test"
Als Ausgabe erhalte ich folgendes:
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>
(Die ersten Zeilen sind die Ausgabe des aufgerufenen Programms, nach der letzten Zeile "Protokoll: End" muss ich eine Taste zur Bestätigung drücken)

Weiß da noch jemand einen Rat? Muss ich dieses "Taste drücken" unterdrücken, damit Python das Script weiter abarbeitet?

LG Corny

Verfasst: Mittwoch 23. Februar 2005, 01:11
von BlackJack
Mal die Hilfe befragen:

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

Verfasst: Donnerstag 24. Februar 2005, 16:52
von Corny
Danke, hat alles super geklappt. Ohne deine Hilfe wäre ich da nicht auf die Idee gekommen, aber ich glaube das vergesse ich jetzt ewig nicht mehr :)