exe lässt sich nicht in python, aber per Doppelclick starten

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
gottlieb
User
Beiträge: 21
Registriert: Freitag 15. März 2013, 14:22

Hallo,
hab nochmal eine Noob Frage.
Habe einen etwas längeren GUI Dialog geschrieben, eine Art Hilfsseite mit Buttons wo dann Bilder und Texte aufpoppen. Diese habe ich mit py2exe in ein .exe File umgewandelt um es aus einer python basierten Umgebung aus, die wx nicht unterstützt zu starten (ControlDesk).
Wenn ich diese .exe per Doppelklick ausführe funktioniert alles prima.
Starte ich die .exe aus einem python File heraus (PythonWin, Python 2.5) mit untem gezeigtem Code, so öffnet sich für einen Bruchteil der Sekunde ein cmd Fenster und das wars. Es macht den Anschein alsob das Program abstürzt.
Dazu muss ich sagen, dass ich gleich auf dem Startframe ein Hintergrundbild habe, das entsprechend im gleichen Ordner wie die exe liegt. Muss man das im py Skript irgendwie mit angeben, ein Arbeitsverzeichnis oder so?

Code: Alles auswählen

import subprocess
subprocess.Popen([r"D:\.....\.....\Arbeitsverzeichnis\test.exe"])
Gruß
BlackJack

@gottlieb: Das mit dem Arbeitsverzeichnis könnte sein. `Popen()` hat da sogar ein Argument für.
Faule Socke
User
Beiträge: 11
Registriert: Mittwoch 27. März 2013, 10:57

Das Subprocess-Modul liefert dir sowohl Zugriff auf stdout/stderr den Kindprozesses als auch den Rückgabewert. Dort wirst du eventuell Ursachen zu deinem Fehler finden. Um das Ausführungsverzeichnis zu wechseln ist der cwd-Parameter des subprocess.Popen c'tors da.[1] Mit os.path.dirname[2] und os.path.abspath[3] bekommst du das Verzeichnis raus, in dem deine exe liegt (falls es nicht sowieso hardcoded ist).

Gruß Socke

Referenzen:
[1] http://docs.python.org/2/library/subpro ... onstructor
[2] http://docs.python.org/2/library/os.pat ... th.dirname
[3] http://docs.python.org/2/library/os.pat ... th.abspath
gottlieb
User
Beiträge: 21
Registriert: Freitag 15. März 2013, 14:22

Was ich noch vergessen habe zu sagen. Wenn ich mit dem Code unten z.b. AdobeReader aufmache, dann geht das. Es liegt also wohl irgendwie an meinem Programm. Habt ihr da Ideen?
@ Socke, ich versteh nicht ganz was du mir sagen möchtest, vielleicht kannst du das nochmal einfacher erklären? :)

Gruß
Faule Socke
User
Beiträge: 11
Registriert: Mittwoch 27. März 2013, 10:57

Jedes Programm hat eine Standardausgabe und eine Fehlerausgabe (stdout und stderr). Das ist ein Stream wo alles hingeschrieben wird, was du mit print ausgibst. wxWidgets macht dort auch Meldungen, wenn was schief läuft, soweit ich weiß.

Vermutlich liegt dein Problem daran, dass deine exe ihre Grafikdateien nicht finden kann, wie du selbst sagst. Daher änderst du mithilfe des cwd-Parameters das Ausführungsverzeichnis der exe, also das Verzeichnis, in dem das Programm ausgeführt wird. Das setzt du idealerweise so, dass in der exe die Pfade zu den Grafikdateien wieder stimmen (wenn der Pfad also z.B. "myslashscreen.png" ist, übergibst du bei cwd das Verzeichnis, in dem auch diese "mysplashscreen.png" liegt).
gottlieb
User
Beiträge: 21
Registriert: Freitag 15. März 2013, 14:22

Hi, also als kurze Rückmeldung:
cwd hat gereicht, jetzt funktioniert es. Wichtig ist wenn man bei cwd den Pfad angibt wie üblich auf doppelte Backslash oder das r: r"D:\das\ist\der\pfad" zu achten. Danke für die Hilfe!
Antworten