Problème avec sys.argv[1]
Résoluphil5718 -
Bonjour,
Windows 11 et Python 3.14.3
Le programme suivant ne fonctionne pas:
# -*- coding:Utf-8 -*-
import sys
if(len(sys.argv) > 1):
s = sys.argv[1]
print(s)
else:
print('Aucun argument !')
alors qu'il fonctionne sur Windows 10 et Python 3.7.2
Il affiche "aucun argument", alors que je l'exécute en lui passant une string
si quelqu'un a une idée ...
12 réponses
Salut,
Chez moi, avec Python 3.14, si je passe l'argument en ligne de commande, ça fonctionne mais pas le "glisser/déposer"
Réponse de l'IA :
Pourquoi ça ne marche plus avec Python 3.14
Depuis Python 3.14, l’installation Windows utilise souvent le nouveau Python Install Manager (MSIX) et un comportement différent pour les associations de fichiers.
Résultat :
-
le script peut s’ouvrir dans une nouvelle console
-
les arguments ne sont pas transmis au script
-
le drag-and-drop sur
.pyne fonctionne plus correctement
Ce problème est signalé par plusieurs utilisateurs et vient du nouveau launcher / gestionnaire d’installation.
Par contre Phil, pas besoin de régresser autant ta version de Python, la 3.13.7 fonctionne.
Bonjour,
lu dans : https://docs.python.org/fr/3/library/sys.html
sys.argv
La liste des arguments de la ligne de commande passés à un script Python. argv[0] est le nom du script (chemin complet, ou non, en fonction du système d'exploitation). Si la commande a été exécutée avec l'option -c de l'interpréteur, argv[0] vaut la chaîne '-c'. Si aucun nom de script n'a été donné à l'interpréteur Python, argv[0] sera une chaîne vide.
La prise en compte des arguments a peut-être changé de la version 3.14.3 à la 3.7.x
lorsque j'exécute la commande:
test.py toto
on ne récupère pas toto
mais en exécutant:
python test.py toto
cela fonctionne
Mais ce qui m'intéresse aussi c'est de glisser-déposer un fichier sur le fichier
test.py, et ca ne marche pas !
Salut,
ne manquerait-il pas un shebang au début de ton programme, ce qui expliquerait qu'il fonctionne avec python test.py toto et pas sans ?
Ton interpréteur python pointe sur quelle version ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionBonjour,
La piste de @blux StatutModérateur (voir message #3) est intéressante car rien ne garanti que ton script soit exécuté par python (c'est d'ailleurs peu probable, ce serait plutôt le langage de ton shell). Ce qui est étonnant, c'est que si ce n'était pas un interpréteur python, tu aurais sans doute dû avoir une erreur au moment d'exécuter "import sys".
Afin de préciser quel interpréteur utiliser, on insère généralement à la première ligne (appelée shebang) du fichier une ligne qui permet de résoudre le chemin de l'interpréteur à utiliser :
- Linux / Mac OS
#!/usr/bin/env python3 # -*- coding: utf-8 -*-
Si le problème persiste malgré le shebang, il serait intéressant de voir ce que contient sys.argv (selon la manière que tu exécutes ton script avec ou sans expliciter l'interpréteur python) :
#!/usr/bin/env python3 # -*- coding: utf-8 -*- import sys print(sys.argv)
Enfin, selon ce que tu veux faire, je t'invite à t'intéresser assez rapidement au module python argparse qui est fait pour récupérer les paramètres de la ligne de commande. optparse pourrait aussi être une option mais n'est pas recommandé.
Bonne chance
Finalement, rien de tout ceci ne fonctionnant, j'ai désinstallé Python 3.14
et j'ai installé Python 3.10
Et tout fonctionne
Passage de paramètre en ligne de commande, ou bien dans l'explorateur,
en glissant-déposant un fichier à traiter sur le fichier .py
Etonnant quand même ...
Bonjour Diablo,
Merci pour ta réponse, cela confirme qu'il y a un problème avec Python 3.14
Par contre, j'ai un autre problème:
Lorsque je fait un clic droit sur un fichier .py, il y a un menu avec une option
Edit with IDLE -> Edit with IDLE 3.10
Mais cette option ne s'affiche pas avec un fichier .pyw
Y a-t-il un moyen de régler ça ?
Salut Phil,
En créant la clé dans le registre :
1️⃣ Ouvrir l’éditeur du registre Win + R regedit 2️⃣ Aller dans la clé HKEY_CLASSES_ROOT\Python.NoConFile\shell 3️⃣ Créer une nouvelle clé Nom : Edit with IDLE Puis à l’intérieur créer la clé : command 4️⃣ Valeur de command Mettre par exemple : "C:\Users\TON_USER\AppData\Local\Programs\Python\Python310\Lib\idlelib\idle.pyw" "%1" (adapte le chemin selon ta version de Python)
Oui surement mal cablé ;-), mais je me rapel que ça ne marchait pas, j'ai fait autrement :
Recherche la clé HKEY_CLASSES_ROOT\SystemFileAssociations\.pyw
dans .pyw crée la clé "Edit with IDLE" ou comme moi "Editer avec IDLE" qui doit avoir la même valeur :
Ensuite Créé commande qui doit avoir comme valeur pyw -m idlelib "%1"
Et ça devrait être bon.



