IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Monter/demonter un DD en python


Sujet :

Python

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2014
    Messages : 5
    Par défaut Monter/demonter un DD en python
    Bonjour à tous et d'avance merci pour votre aide,

    je travailles en Python sur un raspberry PI4 et je souhaite monter et démonter mes disques durs via mon script pour éteindre les disques en cas de mise en veille. En fait actuellement j'ai un script python qui tourne et je met en veille l'écran en cas d'inactivité, et j'éteins l'écran en cas d'inactivité persistante via un relais sur le GPIO, je le réveille aussi via le GPIO. Maintenant je souhaite aller plus loin en démontant et arrêtant les disques durs en cas d'inactivité et les remonter par le même principe. Sur le terminal je fais un "sudo umount /dev/sda1" pour démonter mon disque et "sudo mount -t ntfs-3g /dev/sda1 /media/pi "pour le remonter, ceci fonctionne parfaitement, mais pour le mettre en python .....je bloque franchement.
    Quelqu'un aurait il une fabuleuse idée ?

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 760
    Par défaut
    Salut,

    Citation Envoyé par hj859 Voir le message
    Quelqu'un aurait il une fabuleuse idée ?
    Vous pouvez essayez de faire exécuter la commande bash via subprocess.
    La version plus sportive serait de le faire directement en appelant les primitives systèmes qui vont bien.

    L'un comme l'autre ne présentent pas trop de difficultés: on peut démarrer en s'inspirant des codes qu'on trouve (facilement) sur Internet.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2014
    Messages : 5
    Par défaut
    Bonjour, j'ai essayé des commandes via subprocess en direct sur le terminal en python mais sans aucun succès. Vraiment je ne vois pas. Une précision, mon système est Debian Buster.

  4. #4
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 605
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 605
    Par défaut
    Bonjour,

    avez-vous testé ceci ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo le_mot_de_passe | sudo -S commande

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 760
    Par défaut
    Citation Envoyé par hj859 Voir le message
    Bonjour, j'ai essayé des commandes via subprocess en direct sur le terminal en python mais sans aucun succès.
    Et vous pensez qu'on va se déplacer pour voir ce que vous avez fait?
    Postez le, avec le status de la commande passée.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 242
    Par défaut
    hello,
    une commande sudo exige un mot de passe sauf si dans le fichier /etc/sudoers il y a des lignes qui autorisent certains exécutables à s'exécuter sans mot de passe. Sinon mettre le mot de passe administrateur dans un script est dangereux.
    Ami calmant, J.P

  7. #7
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 760
    Par défaut
    Citation Envoyé par jurassic pork Voir le message
    une commande sudo exige un mot de passe sauf si dans le fichier /etc/sudoers il y a des lignes qui autorisent certains exécutables à s'exécuter sans mot de passe. Sinon mettre le mot de passe administrateur dans un script est dangereux.
    On devrait aussi pouvoir lancer le script (qui lance un subprocess avec sudo machin) via sudo -E python thescript.py pour passer l'environnement shell.
    Mais c'est de la tambouille linux (pas Python) et on ne sait rien du problème rencontré.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2014
    Messages : 5
    Par défaut
    En fait subprocess est fait pour appeler une commande extérieure tel vcgencmd qui lui est fait pour envoyer des commandes à l'écran ou, associé à .run, appelle un autre programme en python. Le problème est que je ne connais ni une commande extérieure qui serait destinée à la gestion des disque ni comment formuler un mini programme python pour commander les disques. En python subprocess ([umount /dev/sda1]) retourne une erreur " umount is not defined".
    C'est bien le problème et ce n'est pas un problème de mot de passe, sur le terminal la commande sudo umount /dev/sda1 s'exécute sans mot de passe

  9. #9
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 760
    Par défaut
    Citation Envoyé par hj859 Voir le message
    En python subprocess ([umount /dev/sda1]) retourne une erreur " umount is not defined".
    S'il ne trouve pas umount, c'est que le répertoire où est l'exécutable n'est pas dans le PATH.
    Vous n'avez pas posté le code mais avec une liste de paramètres et sans shell=True, il vaut mieux passer le chemin absolu du binaire.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  10. #10
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 358
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 358
    Par défaut
    Peut-être voir du coté de autofs avant de faire une tambouille en python...

  11. #11
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 242
    Par défaut
    hello,
    sinon ce code fonctionne chez moi sous Ubuntu 12.04 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    import subprocess
    def umount():
        '''umount /dev/sdc1'''
        cmd = 'sudo umount /dev/sdc1'
        proc = subprocess.Popen(str(cmd), shell=True, stdout=subprocess.PIPE).stdout.read()
        print proc
    umount()
    Ami calmant, J.P

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2014
    Messages : 5
    Par défaut
    waouh !

    merci beaucoup, je pense que cela doit fonctionner sur Buster, je vais essayer ce qui m'apparait être une petite merveille....

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2014
    Messages : 5
    Par défaut
    je confirme cela fonctionne à la perfection, merci beaucoup

  14. #14
    Membre Expert
    Avatar de Pyramidev
    Homme Profil pro
    Tech Lead
    Inscrit en
    Avril 2016
    Messages
    1 513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Tech Lead

    Informations forums :
    Inscription : Avril 2016
    Messages : 1 513
    Par défaut
    Bonjour,

    Citation Envoyé par hj859 Voir le message
    En python subprocess ([umount /dev/sda1]) retourne une erreur " umount is not defined".
    Vraiment ? Que donne whereis umount dans le terminal ?
    Par exemple, chez moi, umount se trouve à l'adresse /usr/bin/umount. Or, comme /usr/bin est dans mon PATH (lisible via echo $PATH dans le terminal), les programmes, dont les scripts Python, peuvent trouver umount.

    Il n'est normalement pas utile de passer par shell=True et encore moins d'utiliser directement Popen.

    Il est plus simple de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #!/usr/bin/env python
     
    from subprocess import check_call
     
    check_call(["umount", "/dev/sdc1"])
    Remarques :
    • Avec la solution ci-dessus, si umount /dev/sdc1 retourne un code autre que 0, par exemple si /dev/sdc1 est déjà démonté, alors check_call lance une exception CalledProcessError. Si ce n'est pas ce qui est voulu, on peut remplacer check_call par call. call retourne le code de la commande appelée.
    • Si on n'aime pas écrire directement une liste comme ["umount", "/dev/sdc1"], on peut aussi écrire "umount /dev/sdc1".split(). Cela marche tant que les éléments de la liste n'ont pas de caractères blancs.
    • S'il y a besoin de sudo, on peut directement appeler sudo adresse_du_script.py ou sudo python adresse_du_script.py.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. monter ou demonter ma partition ubuntu?
    Par s-ehtp dans le forum Ubuntu
    Réponses: 3
    Dernier message: 17/12/2008, 21h02
  2. CORBA & PYTHON
    Par stan91stan dans le forum CORBA
    Réponses: 5
    Dernier message: 10/06/2004, 12h32
  3. [Lien]erreur dans mon programme python
    Par durnambule dans le forum Général Python
    Réponses: 11
    Dernier message: 29/01/2004, 14h59
  4. [VB6] [Réseau] Monter un lecteur réseau
    Par vbcasimir dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 31/03/2003, 10h29
  5. Monter un disque dur USB
    Par Iced Earth dans le forum Matériel
    Réponses: 5
    Dernier message: 13/01/2003, 22h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo