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 :

Exécution d'un script Python dans PHP


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Août 2019
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Finance

    Informations forums :
    Inscription : Août 2019
    Messages : 2
    Par défaut Exécution d'un script Python dans PHP
    Bonjour,

    J'ai un problème avec mon script en Python que je cherche à exécuter au sein d'un script php.

    Le script fonctionne très bien en local, et sur la machine distante quand je me connecte via SSH ou en local sur la machine.

    La machine en question est un serveur nas sous debian 8 sur laquelle j'exécute un serveur web (Apache) + PHP etc...

    Lorsque j'exécute le script dans mon serveur apache voici le message d'erreur que j'obtiens :

    Traceback (most recent call last): File "traitement_ARVI.py", line 12, infor row in reader: File "/usr/lib/python3.4/encodings/ascii.py", line 26, in decode return codecs.ascii_decode(input, self.errors)[0] UnicodeDecodeError: 'ascii' codec can't decode byte 0xef in position 0: ordinal not in range(128)
    Voici mon script Python
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    # coding: utf-8
    import csv
    import glob
    import re
     
     
    for filename in glob.glob('*.csv'):
        with open(filename, newline='') as monFichierEntre:
            reader = csv.reader(monFichierEntre, delimiter=';', doublequote=False)
            nom_sortie='sortie_'+filename
            with open(nom_sortie,'w',newline='') as monFichierSortie:
                writer = csv.writer(monFichierSortie, delimiter=';', quoting=csv.QUOTE_NONE, escapechar='', quotechar='')
                for row in reader:
                    # On ne garde que le format bouteille
                    if row[4]=='75':
                        formatb='BO'
                        # Nom du chateau
                        chateau=row[2]+' '+row[3]
                        chateau=chateau.replace('é','e')
                        chateau=chateau.replace('è','e')
                        chateau=chateau.replace('â','a')
                        chateau=chateau.replace('É','E')
                        chateau=chateau.replace('"','')
                        chateau=chateau.replace(',','')
                        chateau=chateau.replace('.','')
                        #chateau=re.sub(r'[0-9]','',chateau)
                        # année
                        if row[0]=='0':
                            annee='2014'
                        else:
                            annee=row[0]
                        # Prix
                        prix=row[7]
                        # quantite
                        quantite='0'
                        # conditionnement
                        conditionnement='CBO12'
                        # commentaires (on met la quantité et les commentaires)
                        commentaires='QTE : '+row[5]
                        # tarif officieux
                        officieux='1'
                    else :
                        chateau=''
                        annee=''
                        formatb=''
                        prix=''
                        conditionnement=''
                        quantite=''
                        commentaires=''
                        officieux=''
                    # On fabrique la nouvelle ligne dans l'ordre voulu
                    trou=''
                    newRow=[chateau,annee,formatb,prix,quantite,conditionnement,commentaires,officieux,trou,trou]
                    writer.writerow(newRow)
            monFichierEntre.close()
    et voici le script PHP qui l'appelle :

    Code html : 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
    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8" />
            <title>TRAITEMENT TARIFS</title>
        </head>
        <body>
            <?php
                echo shell_exec('sudo python3 traitement_ARVI.py 2>&1');
                $output = shell_exec('ls -l');
                $user = shell_exec('sudo id');
                echo "<pre>$output</pre>";
                echo "<pre>$user</pre>";
                 
            ?>
        </body>
        </html>


    Apres avoir longuement fouillé sur les différents forums, il s'agirait d'un problème d'encodage en UTF-8 qui ne fonctionnerait pas avec Apache ?

    En vous remerciant par avance pour toute l'aide que vous voudrez bien m'apporter

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

    L'erreur dit juste que open(filename, newline='') à ouvert le fichier avec un encoding ASCII qui ne sait pas décoder des bytes >= 127.
    Pour lui dire d'utiliser autre chose que ce défaut, il faut le demander en ajoutant open(..., encoding=XXX).
    Par quoi remplacer XXX, çà dépend du fichier: à vous de tester.

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

  3. #3
    Nouveau candidat au Club
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Août 2019
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Finance

    Informations forums :
    Inscription : Août 2019
    Messages : 2
    Par défaut
    Merci beaucoup !
    j'ai rajouté Ca fonctionne un peu mieux.

    Maintenant le soucis c'est que mes fichiers sources sont enregistrés en CSV utf-8, mais peuvent contenir des accents et autres caractères spéciaux et donc des caractères ascii...

    Y aurait il un moyen plus rapide et plus standard pour tout convertir ?

    Parce que là pour le moment je suis obligé de faire par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    chateau=chateau.replace('â','a')
    chateau=chateau.replace('ë','e')
    etc....
    Pour tous les caractères qui ne passent pas et je risque de rencontrer le même problème pour d'autres variables.

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

    Vous avez ce qu'il faut dans le Python Unicode how to, là où çà parle de comparaison de chaînes de caractères.
    Mais çà ne va fonctionner que pour remplacer les caractères accentués par leur version non accentuée.

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

Discussions similaires

  1. Problème d'exécution de script Python dans une JSP
    Par bleno dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 17/07/2013, 09h41
  2. [PHP 5.4] Script python dans php- transfert de données php python et vice versa
    Par Lanouilled dans le forum Langage
    Réponses: 2
    Dernier message: 06/03/2013, 19h19
  3. Exécution d'un script python dans Blender avec un fichier .bat
    Par ero91 dans le forum Général Python
    Réponses: 4
    Dernier message: 24/01/2013, 12h53
  4. Exécuter un script python depuis PHP
    Par Fawn_noOb_wxPython dans le forum Langage
    Réponses: 4
    Dernier message: 20/10/2008, 13h27
  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