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 :

Execution de script SH [Python 3.X]


Sujet :

Python

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2021
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mars 2021
    Messages : 6
    Par défaut Execution de script SH
    Bonjour la communauté
    Voila mon petit souci;

    Pour les mes clients je doit déployer TeamViewer sur les matériel que j'ai installé chez eux. Il s'agit des raspberry P sous Raspbian

    j'ai besoin de créer un programme simple car en effet je vais envoyer une clé USB a mes clients, il n'aurons plus qu'a double cliquer sur l'exécutable. si je fait cela c'est que je ne peux me déplacer sur chacun de mes clients certains sont a plus de 5h de route allée

    je désire utiliser Python pour mettre en œuvre cela.
    Voila ce que j'ai déjà créer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #!/usr/bin/env python3
     
    import subprocess
    import os
    import stat
     
    st = os.stat('./team.sh')
    os.chmod('./team.sh', st.st_mode | stat.S_IEXEC)
    subprocess.call("./team.sh")

    et le script BASH:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #!/bin/bash
    sudo apt-get -y update;
    sudo apt-get -y upgrade;
    wget https://download.teamviewer.com/download/linux/teamviewer-host_armhf.deb;
    ls | grep teamviewer-host_armhf.deb;
    sudo dpkg -i teamviewer-host_armhf.deb;
    sudo apt --fix-broken install;
    sudo teamviewer passwd myspassword;
    teamviewer info;
    Pour Le script BASH lui il est ok .

    le problème ce situe au niveau du script PYTHON; j'ai l'erreur suivante:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FileNotFoundError: [Errno 2] No such file or directory: 'team.sh'
    ce que je ne comprends pas, c'est que tout les scripts sont dans le même répertoire.

    Vous auriez une idée d'ou cela peut venir , voir même d'optimisation.

    Merci

  2. #2
    Membre Expert Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Par défaut
    Bonjour

    ./team.sh (dans le code python) référence le fichier team.sh du répertoire courant, pas (forcément) du répertoire où se trouve le script python.

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 827
    Billets dans le blog
    1
    Par défaut
    Bonour

    Le répertoire courant mentionné par plxpy est le répertoire dans lequel tu te trouves quand tu lances le script Python. Et donc si (par exemple) tu te trouves dans /tmp et que tu lances "/home/fresmo/script.py", le script cherchera "team.sh" dans "/tmp".
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2021
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mars 2021
    Messages : 6
    Par défaut
    ah ok j'avais pas compris ca comme ca , du coup je comprend mieux

    pour info sur un autre forum on mais conseillé ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #!/usr/bin/env python3
    import os
    import pathlib
    import subprocess
    import stat
     
    CURRENT_DIR = pathlib.Path(__file__).parent.resolve()  # parent path of the current file
    EXECUTABLE = f"{CURRENT_DIR}/team.sh"
     
    st = os.stat(EXECUTABLE)
    os.chmod(EXECUTABLE, st.st_mode | stat.S_IEXEC)
    subprocess.run(["bash", EXECUTABLE])
    ca as l'air de bien fonctionner

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 827
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par fresmo Voir le message
    j'avais pas compris ca comme ca
    C'est la base du positionnement dans l'arborescence. Un processus qui s'exécute part de l'endroit où l'utilisateur se trouve et non pas où le script se trouve. Sinon on ne pourrait plus s'y retrouver.

    Citation Envoyé par fresmo Voir le message
    pour info sur un autre forum on mais conseillé ca...ca as l'air de bien fonctionner
    La solution proposée part du principe que le script Python se trouve dans le même dossier que le .sh. Et construit donc le nom complet du .sh par rapport au dossier dans lequel se trouve le script Python. Si les deux scripts sont effectivement destinés à rester ensembles alors effectivement ça fonctionnera.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Membre Expert Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Par défaut
    Citation Envoyé par fresmo Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    CURRENT_DIR = pathlib.Path(__file__).parent.resolve()  # parent path of the current file
    EXECUTABLE = f"{CURRENT_DIR}/team.sh"
    Pour enfoncer le clou et au risque d'être lourd, une variable/constante THIS_SCRIPT_DIR au lieu de CURRENT_DIR aurait été préférable (j'utilise généralement un HERE pour ce genre de choses).

    CURRENT_DIR fait traditionnellement penser à os.getcwd(). Manquerait plus que le ...WORKING...

  7. #7
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 321
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 321
    Par défaut
    puisque dans ton dernier code tu lances bash, il n'y a plus de raison de faire ton chmod

  8. #8
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 715
    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 715
    Par défaut
    Salut,

    Citation Envoyé par fresmo Voir le message
    j'ai besoin de créer un programme simple car en effet je vais envoyer une clé USB a mes clients, il n'aurons plus qu'a double cliquer sur l'exécutable.
    double-cliquer sur un script exécutera le script en fonction du shebang qui s'y trouve.

    Si le script bash commence par "#!/usr/bin/env bash" pas besoin d'avoir un lanceur "au dessus".

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

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mars 2021
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mars 2021
    Messages : 6
    Par défaut c est moche mais ca marche
    Citation Envoyé par fresmo Voir le message
    ah ok j'avais pas compris ca comme ca , du coup je comprend mieux

    pour info sur un autre forum on mais conseillé ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #!/usr/bin/env python3
    import os
    import pathlib
    import subprocess
    import stat
     
    CURRENT_DIR = pathlib.Path(__file__).parent.resolve()  # parent path of the current file
    EXECUTABLE = f"{CURRENT_DIR}/team.sh"
     
    st = os.stat(EXECUTABLE)
    os.chmod(EXECUTABLE, st.st_mode | stat.S_IEXEC)
    subprocess.run(["bash", EXECUTABLE])
    ca as l'air de bien fonctionner

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

Discussions similaires

  1. comment executer un script perl svp?
    Par nico72 dans le forum Langage
    Réponses: 8
    Dernier message: 13/07/2005, 09h51
  2. [Interbase & D7] executer un script SQL
    Par EGI dans le forum Bases de données
    Réponses: 7
    Dernier message: 13/03/2005, 12h42
  3. Execution de script
    Par IADJOFOGUE dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 26/10/2004, 19h22
  4. Réponses: 4
    Dernier message: 16/07/2004, 09h16
  5. [DEBUTANT]Comment executer un script sql
    Par peaceinpal dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 15/03/2004, 08h44

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