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

Réseau/Web Python Discussion :

Exécution python depuis php avec création de fichier


Sujet :

Réseau/Web Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 5
    Par défaut Exécution python depuis php avec création de fichier
    Bonjour et joyeux noël

    Voilà mon petit problème:

    depuis une page web en php je lance un script python sur une machine distante (à savoir un Raspberry Pi 2 sous Raspian Jessie avec Nginx et PHP 5).

    dans le script python je récupère une variable transmise par le script php, variable que je veux enregistrer dans un fichier.

    le script python fonctionne bien quand je lance en local sur le Raspberry Pi.
    Depuis le web le script python se lance bien mais le fichier n'est jamais créé ?

    je ne comprends pas pourquoi.

    voici les deux scripts:

    script PHP: index.php

    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
    <h2>Chauffage</h2>
     
    <form action="index.php" method="post">
    	<label for="Consigne"> Nouvelle Consigne</label>: <input type="text" name="Consigne" id="Consigne" size="4">
    	°C	
    	<input type="Submit" value="Valider">
    	</form>
    <br>
     
    <?php
    if (!empty($_POST["Consigne"])) {
        $param=$_POST['Consigne'];
        $req = shell_exec("sudo /usr/bin/python /home/lologramme/Documents/www/test.py $param");
        echo $req;
        echo "ok";
    }
    ?>
     
    <h3>Fin</h3>
    et le code Python; test.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
     
    import sys
    import pickle
     
    parametre = sys.argv[1]
     
    fichier=open('para.txt','wb')
    pickle.dump(parametre,fichier)
    fichier.close()
    quelqu'un aurait il une idée sur ce problème;
    par avance merci

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

    Citation Envoyé par Lologramme Voir le message
    quelqu'un aurait il une idée sur ce problème;
    Si vous remplacez:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
         $req = shell_exec("sudo /usr/bin/python /home/lologramme/Documents/www/test.py $param");
    par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
         $req = shell_exec("sudo echo $param >para.txt");
    çà donne quoi?

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

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 5
    Par défaut
    Salut,

    j'ai essayé ton code et ça crée un fichier mais celui ci est vide !

    dans l'absolu je préférerais une solution avec python car le code que j'ai mis sur ce post est juste un test; au final le code python sera plus complexe avec des calculs sur les variables envoyées par le script PHP

    merci pour ton aide

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 5
    Par défaut
    Pou info je fais des essais en local sur mon netbook:
    j'ai installer nginx et php 5 sur mon netbook Linux.
    les fichiers index.php et test.py sont dans mon répertoire /home/.../www
    j'ai crée un lien symbolique vers /var/www/html/test

    si ça peut aider

    merci

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

    Citation Envoyé par Lologramme Voir le message
    j'ai essayé ton code et ça crée un fichier mais celui ci est vide !
    Pourquoi le fichier est vide? Essentiellement parce que dans:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        $req = shell_exec("sudo echo $param >para.txt");
    lorsque le shell va exécuter çà, $param n'est pas une variable définie.

    Essayez de lancer le programme suivant à la console:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    import sys
    print sys.argv[1]
    En lui passant une chose de la forme "$zzz" en argument. Si zzz n'est pas défini, vous obtiendrez:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $ python foo.py $zzz
    Traceback (most recent call last):
      File "foo.py", line 3, in <module>
        print sys.argv[1]
    IndexError: list index out of range
    Donc votre programme Python appelé par shell_exec plante parce que vous ne lui passez pas le paramètre attendu.

    Pour enfoncer le clou, exécutez:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $req = shell_exec("sudo /usr/bin/python /home/lologramme/Documents/www/test.py param");
    çà devrait fonctionner côté création du fichier...

    La question est de savoir comment passer une variable à shell_exec mais il faut la poser dans le bon forum car çà se passe côté PHP et non Python...

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

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 5
    Par défaut
    Salut,

    merci pour ta réponse.
    pour info le paramètre est bien envoyé au script python; j'ai fait des essais et la valeur était bien transmise et le script python s'exécute.
    je vais essayer ce que tu m'a dit.

    A+

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 5
    Par défaut
    Bonjour et bonne année,

    n'y arrivant pas en python je me suis rabattu sur un script SHELL; et la j'ai réussi à faire ce que je voulais:

    voici le code

    script PHP:

    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
     <form action="index_sh.php" method="post">
    	<label for="Consigne"> Nouvelle Consigne</label>:<input type="text" name="Consigne" id="Consigne" size="4">
    	°C	
    	<input type="Submit" value="Valider">
    	</form>
    <br>
     
    <?php
    if (!empty($_POST["Consigne"])) {
    	$consigne = $_POST["Consigne"];
    	$output = array();
    	exec("sh /home/pi/Domotique/RPi/Programmes/Chaudiere/chaudiere.sh nouvelle_consigne $consigne 2>&1", $output);
    	echo "<meta http-equiv=refresh content=\"0; URL=index_sh.php\">";
    }
    ?>
    code scipt SHELL, ça donne ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if [ $1 = "nouvelle_consigne" ]; then
    	> /var/www/html/consigne.txt
       echo -n $2 >> /var/www/html/consigne.txt
       exit 1
    fi
    à savoir que j'ai du changer le répertoire de destination du fichier et enregistrer sous /var/www/html pour des raisons de droit d'accès.

    voilà pour le moment mais je cherche tout de même à faire la même chose en python !!!

    merci pour votre aide.

Discussions similaires

  1. comment lancer un script python depuis php
    Par jarmouz89 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 8
    Dernier message: 16/05/2013, 16h54
  2. Consommer un webservice java depuis PHP avec un wsdl
    Par crazymad dans le forum Services Web
    Réponses: 1
    Dernier message: 04/05/2011, 17h29
  3. Exécuter un script python depuis PHP
    Par Fawn_noOb_wxPython dans le forum Langage
    Réponses: 4
    Dernier message: 20/10/2008, 13h27
  4. Réponses: 2
    Dernier message: 04/10/2007, 11h04
  5. [Système] Exécuter script python depuis php
    Par philpython dans le forum Langage
    Réponses: 1
    Dernier message: 22/03/2007, 13h57

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