J'ai un simple script blah.py (en utilisant Python 2):
import sys
print sys.argv[1]
Si j'exécute mon script par:
python c:/..../blah.py argument
Il affiche l'argument mais si j'exécute le script par:
blah.py argument
erreur se produit:
IndexError ...
Ainsi, les arguments ne passent pas au 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?
Réponses:
Lorsque vous exécutez un script sans taper «python» à l'avant, vous devez savoir deux choses sur la façon dont Windows appelle le programme. Le premier est de savoir quel type de fichier Windows pense qu'il s'agit:
Ensuite, vous devez savoir comment Windows exécute les choses avec cette extension. Il est associé au type de fichier "Python.File", donc cette commande montre ce qu'il va faire:
Donc sur ma machine, quand je tape "blah.py foo", il exécutera cette commande exacte, sans différence de résultats que si j'avais tapé le truc complet moi-même:
Si vous tapez la même chose, y compris les guillemets, vous obtiendrez des résultats identiques à ceux que vous venez de saisir "blah.py foo". Vous êtes maintenant en mesure de résoudre vous-même le reste de votre problème.
(Ou publiez des informations plus utiles dans votre question, comme de véritables copies copier-coller de ce que vous voyez dans la console. Notez que les personnes qui font ce type de chose obtiennent un vote pour leurs questions, et obtiennent des points de réputation, et davantage de personnes sont susceptibles de les aider avec de bonnes réponses.)
Apporté 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, c'est de corriger directement les clés de registre pertinentes pour Python. Met le
la clé de:
Probablement, auparavant,
%*
manquait. De même, définissezà la même valeur. Voir http://eli.thegreenplace.net/2010/12/14/problem-passing-arguments-to-python-scripts-on-windows/
HKEY_CLASSES_ROOT\Applications\python.exe\shell\open\command
Le chemin d'accès au registre peut varier, utiliserpython26.exe
oupython.exe
ou tout ce qui est déjà dans le registre.HKEY_CLASSES_ROOT\py_auto_file\shell\open\command
la source
assoc
etftype
afficher les informations correctes, il peut arriver que les arguments soient supprimés. Ce qui peut aider dans ce cas, c'est de corriger directement les clés de registre pertinentes pour Python. Définissez laHKEY_CLASSES_ROOT\Applications\python26.exe\shell\open\command
clé sur:"C:\Python26\python26.exe" "%1" %*
Probablement, auparavant,%*
manquait. De même, définissezHKEY_CLASSES_ROOT\py_auto_file\shell\open\command
la même valeur. Voir eli.thegreenplace.net/2010/12/14/…test.py 123
et je suis123
imprimé en tant quesys.argv[1]
. Microsoft a-t-il changé quelque chose?vous devez faire de l'application par défaut pour gérer les fichiers python python.exe.
faites un clic droit sur un fichier * .py, sélectionnez la boîte de dialogue "Ouvrir avec". Dans là, 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
la source
De plus, si vous souhaitez pouvoir exécuter vos scripts python sans taper le
.py
(ou.pyw
) à la fin du nom de fichier, vous devez ajouter.PY
(ou.PY;.PYW
) à la liste des extensions dans la variable d'environnement PATHEXT.Sous Windows 7:
un clic droit sur l' ordinateur de
gauche cliquez sur Propriétés
gauche-cliquez sur Paramètres système avancés
gauche cliquez sur l'onglet Avancé
gauche sur Variables d' environnement ...
sous la rubrique « Variables système » défiler vers le bas jusqu'à ce que PATHEXT
clic gauche sur PATHEXT pour le sélectionner
laissé- cliquez sur Modifier ...
Modifiez la "valeur de la variable" pour qu'elle contienne
;.PY
(la touche de fin sautera à la fin)clic
gauche OK clic
gauche OK clic gauche OK
Remarque n ° 1: les fenêtres d'invite de commande ne verront pas le changement sans être fermé et rouvert.
Remarque n ° 2: la différence entre les extensions
.py
et.pyw
est que la première ouvre une invite de commande lorsqu'elle est exécutée, et la seconde non.Sur mon ordinateur, j'ai ajouté
;.PY;.PYW
comme dernières extensions (priorité la plus basse), donc 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 commandes instructives:
la source
Vous pouvez installer pylauncher . Il est utilisé pour lancer les fichiers .py, .pyw, .pyc, .pyo et prend en charge plusieurs installations Python:
Vous pouvez exécuter votre script Python sans spécifier l'extension .py si vous avez .py, .pyw dans la variable d'environnement PATHEXT:
Il ajoute la prise en charge de shebang (
#!
ligne d'en-tête) pour sélectionner la version 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 explicitement, par exemple, pour exécuter avec la dernière version installée de Python 3:
Cela devrait également résoudre votre
sys.argv
problème en tant qu'effet secondaire.la source
J'ai rencontré le même problème mais dans le contexte de la nécessité de conditionner mon code pour les utilisateurs Windows (provenant de Linux). Mon package contient un certain nombre de scripts avec des options de ligne de commande.
J'ai besoin que ces scripts soient installés à l'emplacement approprié sur les machines des utilisateurs Windows afin qu'ils puissent les appeler à partir de la ligne de commande. Comme le package 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 fournis avec leur package Anaconda - consultez votre répertoire Anaconda / Scripts pour des exemples.
Pour un script Python
test
, créez deux fichiers: atest.bat
et atest-script.py
.test.bat
ressemble à ceci (les.bat
fichiers enAnaconda\Scripts
appelpython.exe
avec un chemin relatif que j'ai adapté à mes besoins):test-script.py
est votre véritable script Python:Si vous laissez ces deux fichiers dans votre répertoire local, vous pouvez appeler votre script Python via le
.bat
fichier en faisantSi vous copiez les deux fichiers à un emplacement qui se trouve sur votre
PATH
(tel queAnaconda\Scripts
), vous pouvez même appeler votre script en omettant le.bat
suffixeAvertissement: Je n'ai aucune idée de ce qui se passe et comment cela fonctionne et j'apprécierais donc toute explication.
la source
.bat
wrapper pour chaque script Python est maladroite et redondante. Je ne recommanderais pas cela.Sous Windows ,
Pour exécuter un module python sans taper "python" ,
-> Cliquez avec le bouton droit sur n'importe quel fichier python (*. Py)
-> Définissez la propriété open with sur "python.exe"
-> Cochez la case "toujours utiliser ce programme pour ce type de fichier"
-> Ajoutez le chemin de python.exe à la variable d'environnement, par exemple, ajoutez C: \ Python27 à la variable d'environnement PATH.
Pour exécuter un module python sans taper l'extension ".py"
-> Editez la variable système PATHEXT et ajoutez l'extension ".PY" à la liste.
la source
Vous avez trouvé une réponse incroyablement utile ici : Comment exécuter différentes versions de python dans cmd?
Comme le suggère JF Sebastian, Python Launcher for Windows est le meilleur choix par défaut pour lancer différentes versions de Python dans Windows. Il s'agissait d'un outil tiers, mais il est maintenant officiellement pris en charge depuis Python 3.3.
C'est un excellent outil, utilisez-le!
la source
Pouvez-vous exécuter python.exe à partir de n'importe quelle carte? Si vous ne le faites pas, vérifiez si vous avez des valeurs appropriées pour python.exe dans l'environnement PATH
Êtes-vous dans le même répertoire que blah.py. Vérifiez cela en émettant la commande -> éditez blah.py et vérifiez si vous pouvez ouvrir ce fichier
ÉDITER:
Dans ce cas, vous ne pouvez pas. ( python arg signifie que vous appelez python.exe avec certains paramètres que python suppose que c'est le nom de fichier du script que vous voulez exécuter)
Vous pouvez créer un fichier chauve-souris avec des lignes dans votre carte de chemin et exécuter le fichier .bat
Exemple:
dans l'une des cartes de chemin, créez le fichier blah.py.bat, modifiez le fichier et placez la ligne
Vous pouvez maintenant exécuter blah.py à partir de n'importe quel endroit, car vous n'avez pas besoin de mettre l'extension .bat lors de l'exécution de fichiers bat
la source
Si c'est ce que j'ai compris, c'est comme ça:
COPY (ne pas supprimer) python.exe et renommer py.exe et exécuter:
la source
Exécutez simplement la commande:
En supposant que le nom du fichier se trouve dans le même dossier et que Python a déjà été ajouté aux variables d'environnement.
la source