Ausführen einer *.exe Datei mit Argumenten

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.
Benutzeravatar
Corny
User
Beiträge: 15
Registriert: Dienstag 11. Januar 2005, 10:48
Wohnort: München

Ausführen einer *.exe Datei mit Argumenten

Beitragvon Corny » Freitag 18. Februar 2005, 11:22

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
joe

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

Beitragvon joe » Freitag 18. Februar 2005, 18:04

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
Benutzeravatar
Corny
User
Beiträge: 15
Registriert: Dienstag 11. Januar 2005, 10:48
Wohnort: München

Beitragvon Corny » Freitag 18. Februar 2005, 23:50

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

Beitragvon Gast » Dienstag 22. Februar 2005, 17:22

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
BlackJack

Beitragvon BlackJack » Mittwoch 23. Februar 2005, 01:11

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.
Benutzeravatar
Corny
User
Beiträge: 15
Registriert: Dienstag 11. Januar 2005, 10:48
Wohnort: München

Beitragvon Corny » Donnerstag 24. Februar 2005, 16:52

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 :)

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]