Problème avec sys.argv[1]

Résolu
Phil5718 Messages postés 1 Date d'inscription   Statut Membre Dernière intervention   -  
 phil5718 -

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

Diablo76 Messages postés 337 Date d'inscription   Statut Membre Dernière intervention   139
 

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 .py ne 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.

2
georges97 Messages postés 14493 Date d'inscription   Statut Contributeur Dernière intervention   2 858
 

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

0
phil_5718
 

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 !

0
blux Messages postés 1986 Date d'inscription   Statut Modérateur Dernière intervention   3 446
 

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 ?


0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
phil_5718
 

je suis sur python 3.14.3

comment ça un shebang au début du programme ?

0
PierrotLeFou
 

Faudrait voir sur W11 le programme par défaut associé à l'extension py

0
mamiemando Messages postés 33884 Date d'inscription   Statut Modérateur Dernière intervention   7 913
 

Bonjour,

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

0
phil5718
 

Bonjour Mamiemando,

Merci, je vais regarder tout ça

0
phil5718
 

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 ...

0
phil5718
 

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 ?

0
Diablo76 Messages postés 337 Date d'inscription   Statut Membre Dernière intervention   139
 

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)
1
phil5718
 

Hello Diablo,

ça ne fonctionne pas, mais j'ai peut-être mal câblé le truc:

0
Diablo76 Messages postés 337 Date d'inscription   Statut Membre Dernière intervention   139
 

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.

1
phil5718
 

Ca marche !

Merci bien

0