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

Shell et commandes GNU Discussion :

Lancer un script shell depuis python


Sujet :

Shell et commandes GNU

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2019
    Messages : 6
    Points : 1
    Points
    1
    Par défaut Lancer un script shell depuis python
    Bonjour tout le monde!
    j'ai besoin de lancer un script shell (nommé Allmesh) contenu dans /tmp depuis une console python.
    j'ai essayé cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    subprocess.run(['/tmp/meshCase','./Allmesh'])
    mais un message d'erreur de permission non accordée s'affiche:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Traceback (most recent call last):
      File "/home/nil/.FreeCAD/Macro/fitness_v3.FCMacro", line 69, in <module>
        subprocess.run(['/tmp/meshCase','./Allmesh'])
      File "/tmp/.mount_FreeCASWfZtV/usr/lib/python3.6/subprocess.py", line 403, in run
        with Popen(*popenargs, **kwargs) as process:
      File "/tmp/.mount_FreeCASWfZtV/usr/lib/python3.6/subprocess.py", line 709, in __init__
        restore_signals, start_new_session)
      File "/tmp/.mount_FreeCASWfZtV/usr/lib/python3.6/subprocess.py", line 1344, in _execute_child
        raise child_exception_type(errno_num, err_msg, err_filename)
    <class 'PermissionError'>: [Errno 13] Permission non accordée: '/tmp/meshCase'
    j'ai essayé de supprimer les permissions du répertoire /tmp avec un chmod -R -x /tmp ou de les modifier avec un chmod 777 /tmp (afin de rendre les fichiers éxecutables par un tiers) le premier essai n'ayant pas fonctionné.
    Quelqu'un aurait une idée??
    Merci Beaucoup
    Nil

  2. #2
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 276
    Points : 13 553
    Points
    13 553
    Par défaut
    Bonjour

    Il ne faut pas agir sur le répertoire /tmp, mais sur le fichier Allmesh. C'est le droit d'exécution du fichier que tu dois activer (si tu es sûr de la source et du fait que son exécution ne sera pas malveillante pour ton système).

    Si cet indice ne suffit pas, peux-tu préciser la nature de Allmesh ? Est-ce un script ? Un binaire exécutable ?
    Qui est le propriétaire ? Qui est l'exécutant de ton programme Python ?

  3. #3
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 595
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 595
    Points : 19 478
    Points
    19 478
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    subprocess.run(['/tmp/meshCase/Allmesh'])
    il pourrait être utile de tester que /tmp/meshCase existe et est un répertoire.
    mais ça, c'est une question python à poser sur le forum python, parce que c'est du python. du python !

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2019
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Merci de vos réponses si rapides!
    l'exécutant de mon programme python est un logiciel de CAO (FreeCAD) qui a une console incorporée et je ne sais pas comment trouver le propriétaire du script

    Allmesh est un script shell qui est créé par mon programme dans ce logiciel à chaque fois qu'il est appelé. Le truc c'est que j'ai besoin de le rendre exécutable à chaque fois qu'il est recréé mais je ne sais pas si le "chmoder" une fois suffit pour qu'à chaque fois qu'il réapparaisse il devienne exécutable automatiquement (j'imagine que non).

    J'ai aussi vérifié que le répertoire et les fichiers existe bien et la commande subprocess.run(['/tmp/meshCase/Allmesh']) ressort la même erreur

  5. #5
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 595
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 595
    Points : 19 478
    Points
    19 478
    Par défaut
    non, il n'est pas nécessaire que le script soit exécutable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    subprocess.run(['/bin/bash','/tmp/meshCase/Allmesh'])

  6. #6
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 276
    Points : 13 553
    Points
    13 553
    Par défaut
    (j'imagine que non)
    J'imagine que oui.
    Tout fichier est naturellement créé non-exécutable. Il faut donc le chmoder comme tu dis.

    Mais N_BaH a donné l'astuce en cas de script : donner l'interpréteur (à exécuter) au lieu de donner seulement le fichier seul.

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2019
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Merci,
    J'ai essayé la commande que vous avez proposée. J'arrive à une autre erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Traceback (most recent call last):
      File "/home/nil/.FreeCAD/Macro/fitness_v3.FCMacro", line 210, in <module>
        writer.writeCase()
      File "/home/nil/.FreeCAD/Mod/CfdOF/CfdCaseWriterFoam.py", line 100, in writeCase
        self.clearCase()
      File "/home/nil/.FreeCAD/Mod/CfdOF/CfdCaseWriterFoam.py", line 190, in clearCase
        shutil.rmtree(output_path)
      File "/tmp/.mount_FreeCASWfZtV/usr/lib/python3.6/shutil.py", line 480, in rmtree
        _rmtree_safe_fd(fd, path, onerror)
      File "/tmp/.mount_FreeCASWfZtV/usr/lib/python3.6/shutil.py", line 438, in _rmtree_safe_fd
        onerror(os.unlink, fullname, sys.exc_info())
      File "/tmp/.mount_FreeCASWfZtV/usr/lib/python3.6/shutil.py", line 436, in _rmtree_safe_fd
        os.unlink(name, dir_fd=topfd)
    <class 'PermissionError'>: [Errno 13] Permission non accordée: 'Allrun'
    Ce qui m'étonne c'est que je n'arrive pas à trouver le dossier .mount_FreeCASWfZtV dans /tmp
    Avez-vous une idée de ce qui se passe?

  8. #8
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 595
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 595
    Points : 19 478
    Points
    19 478
    Par défaut
    sans le script...
    probablement un dossier temporaire créé et détruit par le script, mais sans le script...

  9. #9
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 276
    Points : 13 553
    Points
    13 553
    Par défaut
    Ce qui m'étonne c'est que je n'arrive pas à trouver le dossier .mount_FreeCASWfZtV dans /tmp
    Il commence par un point. C'est donc un dossier caché .
    Comme sous d'autres systèmes, cela ne veut pas dire qu'il est inaccessible, mais qu'on peut l'occulter au premier regard, si la bonne procédure n'est pas activée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ mkdir .pouet
    $ ls
    $ ls -a
    .  ..  .pouet
    Le premier "ls" ne ressort rien. Le second "ls" montre le dossier caché.

    [Errno 13] Permission non accordée: 'Allrun'
    Ah oui, mais là ... s'il faut courir après tous les scripts exécutables, à chaque recréation de Allmesh, cela peut devenir sportif.
    Saurais-tu faire la liste complète de ces fichiers à rendre exécutables ?

    je ne sais pas comment trouver le propriétaire du script
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ls -l /tmp/meshCase/Allmesh

  10. #10
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2019
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    voici ce que sort la commande pour connaitre le propriétaire du script:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    -rwxrw-r-- 1 nil nil 1056 oct.  23 20:13 /tmp/meshCase/Allmesh
    Je crois que Allrun est le dernier script à rendre exécutable.
    Sinon' y a-t-il un moyen de rendre tous les scripts et fichiers python d'un dossier exécutables en une commande?
    Voici le script Allmesh (en espérant que cela serve):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    #!/bin/bash
     
    runCommand()
    {
        if [ "$1" == "mpirun" ]; then sol="$4"; else sol="$1"; fi
        sol=$(basename -- "$sol")
        sol="${sol%.*}"
        if [ -f log."$sol" ]; then rm log."$sol"; fi
        "$@" 1> >(tee -a log."$sol") 2> >(tee -a log."$sol" >&2)
        err=$?
        if [ ! $err -eq 0 ]; then exit $err; fi
    }
     
    # Unset and source bashrc
    if [ -f "/home/nil/OpenFOAM/OpenFOAM-v1906/etc/config/unset.sh" ]; then  # for OF < 4
       source "/home/nil/OpenFOAM/OpenFOAM-v1906/etc/config/unset.sh" 2> /dev/null
    else
       source "/home/nil/OpenFOAM/OpenFOAM-v1906/etc/config.sh/unset" 2> /dev/null
    fi
    source "/home/nil/OpenFOAM/OpenFOAM-v1906/etc/bashrc"
     
    # Extract feature edges
    runCommand surfaceFeatureEdges -angle 60 "constant/triSurface/Slice_Geometry.stl" "Slice_Geometry.fms"
    runCommand cartesianMesh
     
    if [ ! -z $FOAM_API ] && [ $FOAM_API -ge 1906 ]
    then
        runCommand surfaceMeshExtract mesh_outside.stl
    else
        runCommand surfaceMeshTriangulate mesh_outside.stl
    fi
     
    runCommand surfaceTransformPoints -scale "(1000 1000 1000)" mesh_outside.stl mesh_outside.stl
    Merci

  11. #11
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 595
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 595
    Points : 19 478
    Points
    19 478
    Par défaut
    si ce n'est pas dans le script, c'est dans l'un des fichiers sourcés.

  12. #12
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 276
    Points : 13 553
    Points
    13 553
    Par défaut
    Ça ressemble de plus en plus à un bourbier. On résume : Sous FreeCAD, tu as un script python qui appelle un script bash. Quelle est l'utilité de faire cela ? Pourquoi le script entier n'est-il pas en python ?

    Tu peux rendre tous les fichiers exécutables si tu veux.

  13. #13
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2019
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    Le script provient en fait d'un module freecad que j'ai installé et j'essaye "d'automatiser" son utilisation. Il y a entre autre ce script qui me permer de réaliser un maillage 3D que j'essaye de lancer depuis une commande python sans intervention extérieure. Ce script appelle un code compilé exterieurement : Cfmesh et Openfoam. Normalement sur freecad il suffit juste de le lancer en cliquant sur un bouton mais je ne trouve pas la commande correspondante en python même en enregistrant une "macro" ( ce qui permet de traduire sur un fichier python toutes les actions faites dans le logiciel FreeCAD).
    Peut -être devrais-je rendre exécutables tous les fichiers de l'ordinateur pour ne pas se prendre la tête mais ça me parait un peu limite côté sécurité.
    Merci

  14. #14
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 595
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 595
    Points : 19 478
    Points
    19 478
    Par défaut
    en fait, les derniers messages ne me semblent pas liés à l'exécution du script shell, mais à des commandes python suivantes.

    erreurs python -> forum python.

  15. #15
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2019
    Messages : 6
    Points : 1
    Points
    1
    Par défaut
    J'y vais tout de suite! merci pour votre aide

  16. #16
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 595
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 595
    Points : 19 478
    Points
    19 478

Discussions similaires

  1. Lancer un script bash depuis python avec un délai d'exécution
    Par chatchat dans le forum Général Python
    Réponses: 5
    Dernier message: 17/04/2019, 15h53
  2. Lancer script shell depuis page PHP
    Par Funky89 dans le forum Langage
    Réponses: 11
    Dernier message: 25/09/2017, 17h43
  3. Appel de script shell depuis python
    Par Marc_27 dans le forum Général Python
    Réponses: 0
    Dernier message: 15/04/2015, 12h06
  4. Lancer un script shell depuis un script python
    Par freestyler dans le forum Général Python
    Réponses: 18
    Dernier message: 04/10/2011, 10h59
  5. lancer un script shell et recupérer les résultats via script python
    Par GoldenEyes dans le forum Général Python
    Réponses: 2
    Dernier message: 04/09/2008, 19h15

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