2009-11-22 4 views
3

Je viens de remarquer que mes anciens codes écrits en python 2.5 ne fonctionnent pas maintenant. Je suis en python 2.6 btw.Il n'y a pas de fonction spawnl dans python 2.6?

>>> os.spawnl(os.P_NOWAIT,"setup.exe") 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "c:\python26\lib\os.py", line 612, in spawnl 
    return spawnv(mode, file, args) 
OSError: [Errno 22] Invalid argument 
>>> 

Une idée? ou avez-vous un exemple de travail de os.spawn * avec l'option NOWAIT.

Mise à jour:

Même je mets le chemin complet dans os.spawnl(), Son erreur encore.

Répondre

5

thrope a raison d'être subprocess étant préféré. Mais le spawn * est toujours là en 2.6. En fait, vous pouvez le voir dans votre message d'erreur. Votre premier argument semble être valide. Je vérifierais le deuxième argument, qui est le chemin.

+0

Je voudrais vérifier les arguments que je ne reçois pas cette erreur lors de l'exécution sur un OS/machine sans setup.exe – Mark

+0

J'ai setup.exe sur le même dossier, je pense que je suis sûr. – YOU

+0

mais je n'ai rien à passer à setup.exe car c'est juste un programme d'installation invoquant. même je mets une chaîne vide "", ça ne marche pas. – YOU

3

Je pense qu'il est recommandé d'utiliser le module subprocess ces jours-ci plutôt que les fonctions os.spawn*. (Je ne peux pas reproduire votre problème, mais je ne suis pas sur Windows).

2

os.spawnl() nécessite le chemin d'accès complet à l'exécutable, tandis que os.spawnlp() utilise la variable d'environnement PATH pour le trouver.

Mise à jour: Il est également fréquent d'utiliser des barres obliques inverses sans échappement dans le chemin littéral (essayez de l'imprimer pour voir s'il est correctement interprété).

+0

toujours la même erreur même je mets le chemin complet dans os.spawnl() – YOU

2

Une recherche Google fait apparaître this page à propos du même problème se produisant lorsqu'il y a un espace dans le chemin d'installation Python. Je ne pourrais pas le reproduire ici, mais c'est peut-être le problème?

Dans tous les cas, according to MS documentation cette valeur d'erreur (EINVAL) ne doit être renvoyée que si l'argument mode est invalide, ce qui n'est pas le cas ici.

+0

thx, mais mon python est dans le 'c: \ python26' – YOU

5

Je l'ai travail en ajoutant le paramètre DUMMY enfin, un peu étrange si

Ce ne fonctionne pas

os.spawnl(os.P_NOWAIT,"Setup.exe") 

Ceci est également ne fonctionne pas

os.spawnl(os.P_NOWAIT,"Setup.exe","") 

Mais que cela fonctionne

os.spawnl(os.P_NOWAIT,"Setup.exe","DUMMY") 

Merci à tous de toute façon.