Lancer la commande mount via popen

xunil2003 Messages postés 766 Date d'inscription   Statut Membre Dernière intervention   -  
mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   -

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. Phil_1857 Messages postés 1883 Date d'inscription   Statut Membre Dernière intervention   169
     

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

    0
  2. xunil2003 Messages postés 766 Date d'inscription   Statut Membre Dernière intervention   14
     

    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.

    0
  3. Phil_1857 Messages postés 1883 Date d'inscription   Statut Membre Dernière intervention   169
     

    Et si tu essaie ceci:

    import sys
    
    try:
    	os.system(CMD)
    except:
    	print(sys.exc_info()[1])
    0
  4. xunil2003 Messages postés 766 Date d'inscription   Statut Membre Dernière intervention   14
     

    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.

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

    Posez votre question
  6. Phil_1857 Messages postés 1883 Date d'inscription   Statut Membre Dernière intervention   169
     

    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]) 
    
    0
  7. xunil2003 Messages postés 766 Date d'inscription   Statut Membre Dernière intervention   14
     

    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.

    0
  8. Phil_1857 Messages postés 1883 Date d'inscription   Statut Membre Dernière intervention   169
     

    bizarre que try/except ne "catche" pas l'erreur ...

    0
  9. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
     

    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

    0