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

    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. Et si tu essaie ceci:

        import sys
        
        try:
        	os.system(CMD)
        except:
        	print(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. 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. 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. 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