Exécution de python sous PHP

a marqué ce sujet comme résolu.

Bonjour à tous ! Après avoir fouiner sur le net afin de savoir comment éxécute t-on un script python sous php j’ai testé ces 2 méthodes mais rien n’y fait : En sachant que mon fichier python est dans le même dossier que mon fichier php

exec("python techSpeciaux.py", $variable);
echo ($variable);

=> Sur ma page web, le message d’erreur est "notice to array"

Avec ce script ci-dessous, il ne passe rien :

$command = escapeshellcmd('techSpeciaux.py');
$output = shell_exec($command);
echo $output;

Je vous explique ce que j’aimerai faire : J’ai 3 ou 4 script python qui scrape des données et me les enregistre en csv. Avec php je les affiche sous forme de tableau dans mon html. J’aimerai que ce fichier csv soit mis a jour :

  • soit quand on va sur la page php
  • soit toute les minutes ou toutes les heures J’aimerai simplement que le fichier csv soit régulièrement à jour

Avez vous des idées?

Merci d’avance.

+0 -0

Salut, (j’ai corrigé tes petites erreurs de formatage pour le code)

Déjà, est-ce que tu as bien Python d’installé ? Sinon, généralement, pour lancer une commande python, on utilise directement le lien vers l’exécutable : /usr/bin/python. Ceci dit, si ton PATH est correctement réglé, tu ne devrais pas avoir de problème.

Dans ta deuxième commande, il manque l’appel à Python :

$command = escapeshellcmd('techSpeciaux.py');

Est-ce que ton CSV est enregistré sur ton PC ? Parce que dans ce cas, le plus simple et le plus propre est de créer une tâche cron qui va lancer ton script python régulièrement. Ton code PHP n’aurait plus qu’à récupérer les données du CSV, ce qui serait plus simple, et en plus éviterait à ton code PHP de devoir attendre que ton script Python s’exécute.

+2 -0

Salut Moté et merci pour tous ces renseignements. Pour l’instant le site n’est pas encore en ligne donc mon fichier csv est sur mon PC mais une fois qu’il sera en ligne je souhaite que le csv soit modifié dans mon répertoire en ligne. Je vais me renseigner sur la tache cron je ne connaissais pas du tout étant qu’un simple novice qui apprend petit a petit. Merci encore pour tout, je reviens te donner des nouvelles. Bonne soirée

Salut, sinon pour une solution plus efficace et facile à maintenir (ou même juste pour que tu le découvres vu tes problématiques actuelles) - il existe un merveilleux outil qui s’appelle Node RED. Tu peux créer des flux de données avec des sources externes, afficher des données sur un dashboard (on peut créer des tableaux node-red-node-ui-table), traiter puis renvoyer ces données vers un autre service (type réseaux sociaux ou email). Tu peux même le relier à du Python si tu le souhaites ou un autre langage. Autrement y’a très peu de codage, c’est beaucoup du paramétrage et des tests. Idéal pour tous les niveaux en développement. Le projet est Open Source avec une belle communauté (dont je ne fais pas partie mais j’adore l’outil :p ). Voici le lien

Autrement je plussoie la réponse de Moté pour les CRON.

+1 -0

Bonjour à tous Je reviens vers vous car je pensais qu’avec OVH je pouvais créer des taches CRON. J’ai réussi à le faire mais cela ne fonctionne pas. Du coup je réitère ma question: Comment exécuter un script python dans une page PHP afin que ce script s’exécute tous les jours 1 fois par heure.
Mon script fonctionne parfaitement quand je le lance manuellement.
Je suis désolé c’est mon premier site avec script python.

Merci par avance

Salut Moté et merci de consacrer de ton temps pour mon problème
Voici le script python qui fonctionne très bien quand je le lance manuellement :

from os import close
import requests
from bs4 import BeautifulSoup
import re
import csv
import pandas as pd

players=[]
for i in range(1,7):
    url = 'https://www.futbin.com/21/players?page='+ str(i) +'&ps_price=5100-10000&version=gold_rare&sort=likes&order=desc'
    response = requests.get(url)
    if response.ok:
        soup = BeautifulSoup(response.text,'lxml')
        tbody = soup.find('tbody')
        extracted = tbody.findAll('tr', {'class': re.compile('player_tr_\d+')})
        #print(extracted)
        for td in extracted :
            name = td.find('a', class_='player_name_players_table')
            #print(name.text)
            detail = td.find('span', class_= 'players_club_nation')
            if detail:
                club = detail.find('a')
            clubLink = club['data-original-title']
            #print(clubLink)
            pays = club.find_next('a')
            paysLink = pays['data-original-title']
            #print(paysLink)
            league = pays.find_next('a')
            leagueLink = league['data-original-title']
            #print(leagueLink)
            #imgPlayer = td.find('img', class_='player_img')
            #if imgPlayer:
            #    imgPlayerLink = imgPlayer['data-original']
            #print(imgPlayerLink)
            note = name.find_next('td')
            #print(note.text)
            position = note.find_next('td')
            #print(position.text)
            version = position.find_next('td')
            #print(version.text)
            prix = version.find_next('td')
            #print(prix.text)
            #print(players)
            players.append([name.text, clubLink, paysLink, leagueLink, note.text, position.text, version.text, prix.text ])
            
            f = 'fut21futMilli1M.csv'
            file = open(f, 'w', newline="", encoding="UTF-8")    
            try:
                #
                # Création de l'''écrivain'' CSV.
                #
                writer = csv.writer(file)
            
                #
                # Écriture de la ligne d'en-tête avec le titre
                # des colonnes.

                #
                # Écriture des quelques données.
                for row in players:
                    
                    writer.writerow(row)
            finally:
                #
                # Fermeture du fichier source
                #
                file.close()  
                

Pour ma tache cron sur ovh comment puis je envoyer un screen?

Merci d’avance

Est-ce que tu es sur un mutualisé ? J’ai l’impression qu’OVH te limite pour créer ta tâche cron. Du coup ta tâche cron a bien quelques soucis je pense. Elle a l’air de ne pas lancer python pour lancer le script.

Donc soit tu appelles python pour pour lancer le script : /usr/bin/python3 script.py, soit, si ce n’est pas possible, tu ajoutes un shebang au début du fichier, qui est une petite ligne qui indique avec quel outil lancer le script.

+0 -0

Merci Moté pour ces conseils mais malheureusement je suis un peu perdu.
/usr/bin/python3 script.py je l’appelle comment? Enfin dans quel script?
Je vais me renseigner sur le shebang et reviens vers toi.
Belle journée a toi et encore merci

C’est dans la tâche cron. Celan permet d’appeler python qui lui va exécuter le script python. Mais je crois que ta tâche cron n’est pas paramétrable pour appeler un exécutable système.

Dans la liste langage, tu n’as pas python ?

Il faudrait peut-être que tu demandes au support d’ovh comment faire une tâche cron pour lancer un script python.

+0 -0

Merci pour ta réponse rapide ! Non effectivement il n’y a pas python dans la liste des langages, seulement plusieurs version de php.
Ci dessous la copie d’un mail OVH me signifiant que la tache CRON n’a pas pu être exécutée.

Bonjour cher client,

Suite à 10 erreurs d’exécution consécutives, une tâche planifiée (CRON) a été désactivé : Commande exécutée : www.fut4fun/fut21futMilli1M.py

Ces erreurs d’exécution sont généralement causées par une anomalie dans le code ou un temps d’exécution trop >long.

N’hésitez pas à modifier votre tâche planifiée directement dans votre Espace Client. Adresse de connexion : https://www.ovh.com/manager/ Sélectionnez votre hébergement dans le menu de gauche, puis onglet CRON.

Cordialement,

Je les contacte par mail et reviens te dire ce qu’il en est dès que j’ai une réponse.

+0 -0

Je n’ai aucun retour de la part d’OVH. Du coup est il possible de demander a mon script python de s’exécuter à chaque fois qu’une personne visite une la page php correspondante ou une sorte de timer qui par exemple toutes les heures lancerait le script python?

Merci d’avance

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte