2009-03-13 19 views
2

Ich habe folgenden Post-Build-Schritt in einem VC++ 2005-Projekt, das einen Python 2.5.1 Skript ruft:Python-Skript in Visual C++ 2005 Build-Schritt Laichen andere Prozesse nicht

postbuild.py 

postbuild.py tut:

Der Prozess startet nie, und es ist das gleiche mit jedem anderen Prozess, den ich versuche, auch mit subprocess.call oder Popen anstelle von os.system.

Kennt jemand etwas in Zusammenhang mit Problemen wie diesem in Python 2.5.1 oder in Build-Ereignissen in Visual C++ 2005 SP1?

Antwort

2

Gelöst. Aus irgendeinem Grund verhindert die Verwendung von "postbuild.py" als Postbuild-Schritt, dass das Python-Skript andere Prozesse hervorbringt, wobei "python.exe postbuild.py" keine Probleme hat und auch nicht "pythonw.exe postbuild.py". Ich bin nicht sicher, warum dies passiert, da alle drei Methoden gültig sind, wenn sie von cmd.exe verwendet werden.

Aber ich würde gerne wissen, ob jemand eine Erklärung dafür hat.

+0

Gerade Freitag stieß ich auf ein extrem ähnliches Problem. Um es zu diagnostizieren, sah os.getenv ("PATH") in meiner Version von "postbuild.py" vernünftig aus, aber subprocess.Popen ("cmd/c echo% PATH%") meldete einen fast vollständig leeren% PATH% . Alles was es enthielt war c: \ python26 \. Ich fand es schließlich auf einen Registrierungsschlüssel, etwas wie HKEY_LOCAL_MACHINE/Software/Microsoft/Windows/App-Pfade. Das ActiveState-Installationsprogramm hatte c: \ Python26 \; es hätte diesen Eintrag der Umgebung von postbuild.py selbst vorangestellt werden müssen, aber stattdessen überschrieb es den Pfad von allem _spawned by_ postbuild.py –

+0

Von "es hätte vorangestellt werden sollen" meine ich "als Folge dieses Schlüssels, sollte MS Windows haben vorangestellt ... " –

0

Beachten Sie, dass das Post-Build-Ereignis nur unmittelbar nach einem abgeschlossenen Build ausgeführt wird. Wenn das Projekt bereits erstellt wurde (und daher nicht erneut erstellt werden muss), wird der Post-Build-Schritt überhaupt nicht ausgeführt.

Wenn Sie das Python-Skript bearbeiten und anschließend versuchen, es durch Erstellen des Projekts auszuführen, wird nichts ausgeführt, es sei denn, Sie bearbeiten jedes Mal eine Datei im Projekt, um den Build zu erzwingen.

+0

Ich habe immer alles neu aufgebaut, nur für den Fall, es war ein kleines Projekt. –