96 votes

Comment exécuter les scripts Python sous Windows ?

J'ai un simple script blah.py (utilisant Python 2) :

import sys
print sys.argv[1]

Si j'exécute mon script par :

python c:/..../blah.py argument

Il imprime l'argument mais si j'exécute script par :

blah.py argument

une erreur se produit :

IndexError...

Les arguments ne passent donc pas à script.

python.exe dans PATH. Dossier avec blah.py également dans PATH.
python.exe est le programme par défaut pour exécuter les fichiers *.py.

Quel est le problème ?

3 votes

Poster un extrait de code pourrait nous aider à vous aider.

0 votes

L'homme sans boule de cristal a déjà donné une solution=) print sys.argv[1] produit cette erreur.

0 votes

Si vous avez plusieurs versions de Python installées, vous pouvez avoir besoin de ceci stackoverflow.com/questions/1934675/ .

146voto

Peter Hansen Points 8487

Lorsque vous exécutez un script sans taper "python" devant, vous devez savoir deux choses sur la façon dont Windows invoque le programme. La première est de savoir quel type de fichier Windows pense qu'il s'agit :

    C:\\>assoc .py
    .py=Python.File

Ensuite, vous devez savoir comment Windows exécute les choses avec cette extension. Elle est associée au type de fichier "Python.File", et cette commande montre ce qu'elle va faire :

    C:\\>ftype Python.File
    Python.File="c:\\python26\\python.exe" "%1" %\*

Ainsi, sur ma machine, lorsque je tape "blah.py foo", il exécutera cette commande exacte, sans que les résultats soient différents de ceux que j'aurais obtenus si j'avais tapé moi-même la commande complète :

    "c:\\python26\\python.exe" "blah.py" foo

Si vous tapez la même chose, y compris les guillemets, vous obtiendrez des résultats identiques à ceux obtenus lorsque vous tapez simplement "blah.py foo". Vous êtes maintenant en mesure de résoudre le reste de votre problème par vous-même.

(Ou bien, postez des informations plus utiles dans votre question, comme des copies copiées-collées de ce que vous voyez dans la console. Notez que les personnes qui font ce genre de choses voient leurs questions votées, et elles obtiennent des points de réputation, et plus de personnes sont susceptibles de les aider avec de bonnes réponses).

Apporter des commentaires :

Même si assoc et ftype affichent les informations correctes, il peut arriver que les arguments soient supprimés. Ce qui peut aider dans ce cas est de fixer directement les clés de registre pertinentes pour Python. Définissez le

HKEY_CLASSES_ROOT\Applications\python26.exe\shell\open\command

clé pour :

"C:\Python26\python26.exe" "%1" %*

Probablement, auparavant, %* a disparu. De même, l'ensemble

 HKEY_CLASSES_ROOT\py_auto_file\shell\open\command

à la même valeur. Voir http://eli.thegreenplace.net/2010/12/14/problem-passing-arguments-to-python-scriptssur les fenêtres/

example registry setting for python.exe HKEY_CLASSES_ROOT\Applications\python.exe\shell\open\command Le chemin du registre peut varier, utilisez python26.exe o python.exe ou celui qui se trouve déjà dans le registre.

enter image description here HKEY_CLASSES_ROOT\py_auto_file\shell\open\command

30 votes

Même si assoc y ftype afficher les informations correctes, il peut arriver que les arguments soient supprimés. Ce qui peut aider dans ce cas est de fixer directement les clés de registre pertinentes pour Python. Définissez le HKEY_CLASSES_ROOT\Applications\python26.exe\shell\open\comma‌​nd clé pour : "C:\Python26\python26.exe" "%1" %* Probablement, auparavant, %* a disparu. De même, l'ensemble HKEY_CLASSES_ROOT\py_auto_file\shell\open\command à la même valeur. Voir eli.thegreenplace.net/2010/12/14/

5 votes

@parvus Votre commentaire a été la solution ultime pour moi. Même avec les associations lues correctement, ces deux clés étaient toutes deux mal réglées.

1 votes

J'ai également rencontré des problèmes avec HKEY_CLASSES_ROOT. \.py\OpenWithProgids est défini comme quelque chose lié à VisualStudio, en particulier lorsque j'essaie d'exécuter des scripts Python dans mes tests AppVeyor. Voir aide.appveyor.com/discussions/problèmes/ .

23voto

santosc Points 738

Vous devez faire en sorte que l'application par défaut pour gérer les fichiers python soit python.exe.

Cliquez avec le bouton droit de la souris sur un fichier *.py, puis sélectionnez la boîte de dialogue "Ouvrir avec". Dans cette boîte de dialogue, sélectionnez "python.exe" et cochez "Toujours utiliser ce programme pour ce type de fichier" (quelque chose comme ça).

alors vos fichiers python seront toujours exécutés en utilisant python.exe

16voto

Dave Burton Points 825

En outre, si vous souhaitez pouvoir exécuter vos scripts python sans avoir à taper l'option .py (o .pyw ) à la fin du nom de fichier, vous devez ajouter .PY (o .PY;.PYW ) à la liste des extensions de la variable d'environnement PATHEXT.

Dans Windows 7 :

cliquez avec le bouton droit de la souris sur Ordinateur
cliquez à gauche sur Propriétés
cliquez à gauche sur Paramètres système avancés
cliquez à gauche sur l'onglet Avancé
cliquez à gauche sur Variables d'environnement...
sous "variables système", faites défiler vers le bas jusqu'à ce que vous voyiez PATHEXT
cliquez avec le bouton gauche de la souris sur PATHEXT pour le mettre en évidence
cliquez à gauche sur Editer...
Modifiez "Valeur de la variable" pour qu'elle contienne ;.PY (la touche End permet de passer à la fin)
clic gauche sur OK
clic gauche sur OK
clic gauche sur OK

Note 1 : l'invite de commande Windows ne verra pas le changement sans être fermée et rouverte.

Remarque n° 2 : la différence entre le .py y .pyw est que le premier ouvre une invite de commande lorsqu'il est exécuté, alors que le second ne le fait pas.

Sur mon ordinateur, j'ai ajouté ;.PY;.PYW comme les dernières extensions (les moins prioritaires), de sorte que les valeurs "avant" et "après" de PATHEXT étaient :

avant : .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC

après .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.PY;.PYW

Voici quelques commandements instructifs :

C:\>echo %pathext%
.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.PY;.PYW

C:\>assoc .py
.py=Python.File

C:\>ftype Python.File
Python.File="C:\Python32\python.exe" "%1" %*

C:\>assoc .pyw
.pyw=Python.NoConFile

C:\>ftype Python.NoConFile
Python.NoConFile="C:\Python32\pythonw.exe" "%1" %*

C:\>type c:\windows\helloworld.py
print("Hello, world!")  # always use a comma for direct address

C:\>helloworld
Hello, world!

C:\>

4voto

J.F. Sebastian Points 102961

Comment exécuter les scripts Python sous Windows ?

Vous pouvez installer pylauncher . Il est utilisé pour lancer des fichiers .py, .pyw, .pyc, .pyo et supporte plusieurs installations Python :

T\:> blah.py argument

Vous pouvez exécuter votre script Python sans spécifier l'extension .py si vous avez .py, .pyw dans la variable d'environnement PATHEXT :

T:\> blah argument

Il ajoute le support pour shebang ( #! ligne d'en-tête) pour sélectionner la version de Python souhaitée sous Windows si plusieurs versions sont installées. Vous pouvez utiliser une syntaxe compatible *nix #! /usr/bin/env python .

Vous pouvez spécifier la version de manière explicite, par exemple, pour utiliser la dernière version installée de Python 3 :

T:\> py -3 blah.py argument

Il devrait également réparer votre sys.argv comme un effet secondaire.

0 votes

Python Launcher est en statut bêta.

0 votes

@NicolasBarbulesco : Le lanceur Python est inclus dans Python 3.3 c'est-à-dire qu'il est suffisant

0 votes

Peut-être. Mais Je n'ai pas réussi à installer Python 3 sous Windows. . Peut-être que vous pouvez m'aider ici.

4voto

J'ai rencontré le même problème, mais dans le contexte de la nécessité d'empaqueter mon code pour les utilisateurs de Windows (venant de Linux). Mon paquetage contient un certain nombre de scripts avec des options de ligne de commande.

J'ai besoin que ces scripts soient installés à l'endroit approprié sur les machines des utilisateurs de Windows afin qu'ils puissent les invoquer à partir de la ligne de commande. Comme le paquet est censé être convivial, demander à mes utilisateurs de modifier leur registre pour exécuter ces scripts serait impossible.

Je suis tombé sur une solution que les gens de Continuum utilisent pour les scripts Python qui sont fournis avec leur paquetage Anaconda -- vérifiez votre répertoire Anaconda/scripts pour des exemples.

Pour un script Python test créez deux fichiers : un test.bat et un test-script.py .

test.bat se présente comme suit (le .bat fichiers dans Anaconda\Scripts appelez python.exe avec un chemin relatif que j'ai adapté pour mes besoins) :

@echo off
set PYFILE=%~f0
set PYFILE=%PYFILE:~0,-4%-script.py
"python.exe" "%PYFILE%" %*

test-script.py est votre script Python actuel :

import sys
print sys.argv

Si vous laissez ces deux fichiers dans votre répertoire local, vous pouvez invoquer votre script Python par l'intermédiaire de la balise .bat en faisant

test.bat hello world
['C:\\...\\test-scripy.py', 'hello', 'world']

Si vous copiez les deux fichiers à un endroit qui se trouve sur votre site Web, vous pouvez les copier sur le site Web de l'entreprise. PATH (par exemple Anaconda\Scripts ), vous pouvez même invoquer votre script en omettant l'élément .bat suffixe

test hello world
['C:\\...Anaconda\\Scripts\\test-scripy.py', 'hello', 'world']

Clause de non-responsabilité : Je n'ai aucune idée de ce qui se passe et de comment cela fonctionne et j'apprécierais donc toute explication.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X