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