Lancer la commande mount via popen

Bonjour,

Je suis sur python 3.8.10 et j’essaie de faire un retour du shell avec plusieurs arguments, en vain.

Les importations

import tkinter as tk, os
import subprocess

La commande shell à exécuter

CMD = "pkexec mount -t vfat /dev/sdg4 /media/laurent/ZP100"

Essai

retour = os.popen(CMD).read()
print ("retour : ", retour)

Le retour est vide sauf dans le terminal

mount: /media/laurent/ZP-100: le périphérique spécial /dev/sdg4 n'existe pas.
retour :

j'en ai fait d'autre avec subprocess, Mais avec Popen je n'arrive pas à avoir un retour dans la variable retour .

Merci d'avance pour vos avis et conseils.
Linux / Firefox 109.0

8 réponses

  1. Modérateur

    Bonjour,

    Si le point de montage n'existe pas il faut le créer au préalable, soit en shell :

    sudo mkdir -p /media/laurent/ZIP-100

    ... soit avec os.mkdir.

    Bonne chance

    1. Bonjour,

      Idem, j'ai dans le terminal

      mount: /media/laurent/ZIP-100: le point de montage n'existe pas.

      est la listbox est vide.

      Merci.

      1. Bonjour,

        Ok, mais sans les lignes 9 et 10, juste ceci, ça donne quoi ? :

        import sys
        
        try:
            os.system(CMD)
        except:
            text_box.insert(tk.END, sys.exc_info()[1]) 
        
        1. Bonsoir,

          avec

          import sys
          
          try:
              retour = os.system(CMD)
          except:
              print("sys.exc_info()[1] : ",sys.exc_info()[1])
           
              
          print ("retour : ", retour)
          text_box.insert(tk.END, retour) 
             

          j'ai dans le terminal

          mount: /media/laurent/ZIP-100: le point de montage n'existe pas.
          retour :  8192

          est dans la listbox

          8192

          Merci.

          1. Et si tu essaie ceci:

            import sys
            
            try:
            	os.system(CMD)
            except:
            	print(sys.exc_info()[1])
            1. Bonjour,

              j'ai fait

              retour = os.popen(CMD).read()
              print ("retour : ", retour)

              et vous vous me dites :

              s_nb = os.popen('wmic bios get serialnumber').read()
              

              c'est pareil, et d'essayer avec

              ret = os.system(CMD)

              1er essai avec :

              retour = os.system(CMD)
              print ("retour : ", retour)
              text_box.insert(tk.END, retour)

              j'ai dans la console :

              mount: /media/laurent/ZIP-100: le point de montage n'existe pas.
              retour :  8192
              

              et dans la listbox

              8192

              2em test avec :

              retour = os.popen(CMD).read()
              print ("retour : ", retour)
              text_box.insert(tk.END, retour)

              en console il n'y a aucun retour avec la variable retour alors qu'il y un un message dans la console

              mount: /media/laurent/ZIP-100: le point de montage n'existe pas.
              retour : 

              La listbox est vide

              Il me faut un retour pour l'utilisateur, je n'arrive pas a trouver la soluce pour avoir en retour :

              mount: /media/laurent/ZIP-100: le point de montage n'existe pas.

              PS : Pour le message du 24/01 je n'ai pas reçus l'email de réponse ?

              Merci.

              1. Bonjour,

                C'est une commande pour monter un périphérique, peut-être qu'il n'y a pas de valeur

                de retour, la commande s'exécute et l'action se fait ou pas

                 Dans ton post du 24 janvier, je t'avais expliqué cette méthode que tu utilise ici, mais pour un autre

                type de commande

                Par exemple, moi je récupère le no de série de mon pc comme ceci:

                s_nb = os.popen('wmic bios get serialnumber').read()

                car il y a bien une valeur à récupérer (le no de série)

                mais dans ton cas, peut-être que ceci suffit:

                ret = os.system(CMD)

                pour avoir un statut de retour de la commande (erreur ou succès)

                Au fait, ce n'est pas en vingt mais en vain :-)