Problème avec sys.argv[1]

Résolu

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

  1. Contributeur

    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
    1. 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
      1. Modérateur

        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
        1. je suis sur python 3.14.3

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

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

            0
            1. Modérateur

              Bonjour,

              La piste de  (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
              1. Bonjour Mamiemando,

                Merci, je vais regarder tout ça

                0
                1. 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
                  1. 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
                    1. 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
                      1. 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
                    2. Hello Diablo,

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

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