2010-06-28 5 views
2

L'histoire a commencé avec une erreur très étrange pendant que je courais mon script de PyDev. Exécuter le même script depuis l'extérieur ne rencontrera pas le même problème.Comment utiliser correctement PyDev avec deux versions différentes de Python avec des scripts qui rappellent d'autres scripts python?

 
Fatal Python error: Py_Initialize: can't initialize sys standard streams 
    File "C:\Python26\lib\encodings\__init__.py", line 123 
    raise CodecRegistryError,\ 
          ^
SyntaxError: invalid syntax 

This application has requested the Runtime to terminate it in an unusual way. 
Please contact the application's support team for more information. 

j'ai pu trouver pourquoi cela se passe: En PyDev j'utilise deux versions de Python différentes: 3.1 qui est l'installation par défaut et 2.6 comme une alternative. Mon environnement Windows ne contient pas PYTHONHOME, CLASSPATH, PYTHONPATH mais PyDev les ajoute. Maintenant le problème est à un moment mon script python exécute un autre script python en utilisant os.system (python second.py) et le second script échouera avec l'erreur ci-dessus.

Maintenant, je cherche un moyen d'éviter ce problème, problème qui se produit car il va exécuter le python par défaut en utilisant les paramètres de celui par défaut (ajouté par PyDev).

Je ne veux pas changer l'appel standard (python file.py) mais je veux pouvoir exécuter mon script de pydev sans problème et pouvoir utiliser l'environnement python par défaut ou alternatif.

Des idées?

Répondre

2

J'ai trouvé une solution qui convient particulièrement parce qu'elle n'interfère pas avec l'exécution des scripts sur d'autres systèmes, juste pour exécuter python -E second.py - cela forcera Python à ignorer les variables d'environnement PYTHON *.

0

Je ne comprends peut-être pas très bien, mais je pense que vous invoquez un script de pydev qui fonctionne bien, mais ce script exécute un autre script qui nécessite une version différente.

Bien que cela soit malheureusement spécifique à l'installation, vous pouvez utiliser os.system ("c: \ absolute \ chemin \ vers \ proper \ version \ de \ python.exe second.py").

Si PyDev est en train de configurer des variables d'environnement conflictuelles, vous pouvez rechercher des sous-processus sur os.system.

http://docs.python.org/library/subprocess.html#using-the-subprocess-module

Cela vous permettra d'invoquer un processus avec une poignée, de sorte que vous pouvez éventuellement attendre qu'il se termine. Cela vous permettra également de passer des variables d'environnement lors de l'exécution.

+0

D'abord, appeler Python avec le chemin d'accès complet est inacceptable. Deuxièmement, le second script ne nécessite pas de version python spécifique, mais comme il exécute l'interpréteur pyhton par défaut avec un autre paramétrage ENV python, il échouera (python échouera). J'ai déjà trouvé une solution, pour appeler toujours ce script python avec -E, ce qui signifie qu'il va ignorer PYTHONPATH. – sorin

0

Je crois que l'appel devrait être:

import sys

os.system (sys.executable + 'second.py')

Alors que vous garantissez que vous utilisez le même interprète, vous est actuellement en cours d'exécution et ne lance pas l'autre (ou vouliez-vous vraiment utiliser l'autre interpréteur?)

Questions connexes