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 :

PHP <==> Json <==> Python [Python 2.X]


Sujet :

Python

  1. #1
    Membre actif
    Homme Profil pro
    développeur
    Inscrit en
    Octobre 2004
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : développeur
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2004
    Messages : 479
    Points : 281
    Points
    281
    Par défaut PHP <==> Json <==> Python
    J'ai un script PHP qui exécute un script Python en lui envoyant des paramètres au format JSON. Ca fonctionne parfaitement.
    En retour, le script Python répond avec un résultat au format JSON. Et là, il y a quelque chose de bizarre...

    Voici la suite de tests réalisés.

    Un extrait du script Python mon_script1.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    data = {'toto' : 10, 'titi' : 11}
    print(json.dumps(data))
    exécution en ligne de commande Python : OK (moi@mon_ordi: python mon_script1.py)
    exécution en prompt PHP : OK (php > script_appel.php)
    exécution en ligne de commande PHP : OK (moi@mon_ordi: php script_appel.php)
    exécution via le navigateur : OK

    Maintenant, je tente ceci

    mon_script2.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    data = {'toto' : 10, 'titi' : 11}
    return data
    mon_script1.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    retour = mon_script2()
    print(json.dumps(retour))
    exécution en ligne de commande Python : OK (moi@mon_ordi: python mon_script1.py)
    exécution en prompt PHP : OK (php > script_appel.php)
    exécution en ligne de commande PHP : OK (moi@mon_ordi: php script_appel.php)
    exécution via le navigateur : NOK

    J'ai ajouté des paramètres dans la ligne de commande du script PHP pour voir ce qui se passe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $data_envoi = escapeshellarg(json_encode($data_envoi));
    $command = escapeshellcmd("/usr/bin/python /home/chemin/vers/script/mon_script1.py 2>&1");
    $data_retour = exec("$command $data_envoi", $sortie, $error);
    Je reteste

    exécution en ligne de commande Python : OK (moi@mon_ordi: python mon_script1.py)
    exécution en prompt PHP : OK (php > script_appel.php)
    exécution en ligne de commande PHP : NOK (moi@mon_ordi: php script_appel.php)
    exécution via le navigateur : NOK

    J'obtiens l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Extra data: line 1 column 2 - line 1 column 5 (char 1 - 4)
    avec $error 1

    Je suis perplexe...

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par senacle Voir le message
    J'ai un script PHP qui exécute un script Python en lui envoyant des paramètres au format JSON. Ca fonctionne parfaitement.
    En retour, le script Python répond avec un résultat au format JSON.
    L'intérêt de faire des "boîtes" est de pouvoir définir rôle et responsabilité de chacun. Donc si vous savez établir que le script Python sort avec SUCCESS et pousse du JSON dans stdout...(*) le problème sera côté PHP.
    (*) quite à écrire un script bash ou Python qui teste cela.

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

  3. #3
    Membre actif
    Homme Profil pro
    développeur
    Inscrit en
    Octobre 2004
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : développeur
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2004
    Messages : 479
    Points : 281
    Points
    281
    Par défaut
    J'ai beau tourné l'affaire dans tous les sens, je ne comprends pas.
    Autre test

    mon_script2.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    data = {'toto' : 10, 'titi' : 11}
    return data
    mon_script1.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    retour = mon_script2()
    result = {}
    result['roro'] = 10
    result['riri'] = 11
    toto = json.dumps(result)
    print(toto)
    exécution en ligne de commande Python (moi@mon_ordi: python mon_script1.py)
    • OK
    • j'obtiens {"riri": 11, "roro": 10}
    • on voit bien que la liste a été "jsonifiée" par python car classée par ordre alphabétique


    exécution en prompt PHP (php > script_appel.php)
    • OK
    • j'obtiens {"riri": 11, "roro": 10}
    • on voit bien que la liste a été "jsonifiée" par python car classée par ordre alphabétique


    exécution en ligne de commande PHP (moi@mon_ordi: php script_appel.php)
    • OK
    • j'obtiens {"riri": 11, "roro": 10}
    • on voit bien que la liste a été "jsonifiée" par python car classée par ordre alphabétique


    exécution via le navigateur
    • NOK
    • j'otiens array(0) avec $error=1

  4. #4
    Membre actif
    Homme Profil pro
    développeur
    Inscrit en
    Octobre 2004
    Messages
    479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : développeur
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2004
    Messages : 479
    Points : 281
    Points
    281
    Par défaut
    Le script PHP récupère des données postées d'un formulaire, les met en json et les envoie au script python.

    Mais les données postées d'un formulaire sont récupérées au format string par PHP dans la variable $_POST.

    Alors que le script Python attend des int.

    Dans le script PHP, je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    intval($_POST['valeur_postee']);
    pour la mettre en type int.

    Et l'enchaînement Navigateur ==> PHP ==> JSON ==> Python ==> JSON ==> PHP ==> Navigateur fonctionne parfaitement.

    Je savais que c'était simple....


    P.S. : Je sais, l'enchaînement n'est pas optimisé, mais je ne peux pas faire autrement...pour l'instant.

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

Discussions similaires

  1. string json to objet python
    Par lenoil dans le forum Général Python
    Réponses: 4
    Dernier message: 15/11/2012, 10h45
  2. Requête AJAX vers PHP, back-end JSON et résultat
    Par wenijah dans le forum jQuery
    Réponses: 2
    Dernier message: 23/04/2012, 14h19
  3. Récupérer variable php au format json
    Par switchmo dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 24/05/2011, 14h48
  4. PHP array to json to android Spinner
    Par monta007 dans le forum Composants graphiques
    Réponses: 2
    Dernier message: 20/04/2011, 11h13

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