J'ai essayer de fouiller le net mais je n'arrive pas à trouver la réponse à ma question. Pour l'un de mes projets, j'ai un programme python qui se connecte à une API et qui modifie une base de données. Ensuite j'ai un code PHP qui ne connecte à cette même base de données et qui m'affiche son contenu sur une page web.
J'ai vu plusieurs fois que je pouvais combiner les deux en utilisant la commande exec (par exemple) sur dans mon PHP sauf que celle-ci ne fonctionne pas. J'aurais donc voulu savoir s'il était possible que au chargement de ma page web j'exécute le code python puis que le PHP affiche le contenu de la table de ma BDD ?
J'espère avoir été assez clair dans mes explications.
Merci de votre attention.
- Edité par GabinSerrurot1 31 janvier 2023 à 19:12:10
Déjà pourquoi faire simple quand on peut faire compliquer ?
Ensuite, tu as pas réussi à exécuter du python à partir d'un code PHP, si je comprends bien... du coup quelle est l'erreur renvoyée ?
À mon sens je ne vois rien qui pourrait empêcher de faire cela si les deux fichiers PHP et Python se trouve localement au même endroit.
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard) La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Alors déjà le projet en question est un projet scolaire dans lequel il n'y a pas forcément d'obligation de connecter le .py et le .php donc pour ceci je peux faire sans. Mon enseignant a un site à lui dans lequel il a un script python qui gère le back-end et je n'ai jamais eu trop l'occasion de lui demander à lui comment il fait ça. J'aurais voulu réutiliser le code python qu'on a fait en TP pour mon site à moi pour le faire sur mon site mais si tu as une solution plus simple je suis preneur (en en apprentissage, puisque je pose une question sur un forum...).
Le problème est là. Malgré que j'ai activé l'affichage des erreurs en php, il ne m'en affiche aucune.
<?php echo exec('python combinaison.py');?>
Voici le code php au cas où l'erreur viendrait de ma commande ? Les deux fichiers sont dans le même répertoire. J'ai essayé avec et sans le echo au cas où mais rien n'y fait.
- Edité par GabinSerrurot1 31 janvier 2023 à 20:31:54
Si combinaison.py appelle l'API, il y a sans doute la réponse du serveur, sauf que dans ton cas tu n'as pas l'air d'enregistrer cela quelque part (une variable ?) ...
Ça peut amener à savoir ce qui ne convient pas au serveur.
C'est une requête POST, GET, UPDATE ?
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard) La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
L'API renvoie un fichier json et je l'utilise dans le fichier python. En fait à la base le fichier combinaison.py requête l'API, se connecte à ma base de données, certains champs du retour sont enregistrés dans cette base de données et c'est tout pour lui. Le problème est que quand je met le code que j'ai fournis dans mon message précédent, le chargement de ma page se passe nickel mais ma base de données ne se met pas à jour.
Il s'agit d'une requête GET utilisée par le module 'requests' de python.
Mais tu utilises une requête POST pour modifier ta base de données depuis ton script python ? Parce-que GET permet juste de récupérer des données...
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard) La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
tu te connectes en local sur ta base de données ? Je comprends plus rien...
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard) La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Nan je me connecte avec mes informations habituelles. En gros sur mon serveur je peux faire l'exécution du fichier python puis recharger ma page php mais je ne peux pas lier les deux.
Peut-être qu'il y a quelque chose qui m'échappe et je m'en excuse si c'est le cas. Sachant que les deux fichiers sont sur le serveur de mon établissement qui a python d'installé, puisque je peux exécuter mon script python sans problèmes on est bien d'accord que je devrais pouvoir utiliser la commande exec sans problèmes ?
- Edité par GabinSerrurot1 31 janvier 2023 à 21:22:16
oui c'est ça, si le script fonctionne correctement séparément, alors c'est que le problème vient du code PHP.
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard) La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
profite que tu es sur un forum python pour mettre le code Python va ...
Le PHP je maîtrise pas, mais tu peux aller sur le forum adapté pour le présenter et vérifier que tout est ok.
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard) La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Pas de soucis, mas déjà le code python fonctionne très bien donc je ne vois pas pourquoi le problème viendrait de lui mais pourquoi pas. Et de plus le code n'est pas très propre désolé.
import requests
import json
import mysql.connector
# Définition des paramètres de la requête
params = {'realm': '/partenaire'}
# Définition de l'entête de la requête
headers = {'Content-Type': 'application/x-www-form-urlencoded'}
# Définition du corps de la requête
data = {"grant_type": "client_credentials",
"client_id": "identifiant",
"client_secret": "identifiant",
"scope": "api_offresdemploiv2 o2dsoffre"}
# Envoi de la requête POST
response = requests.post('https://entreprise.pole-emploi.fr/connexion/oauth2/access_token',
params=params,
headers=headers,
data=data)
# Affichage de la réponse sous forme texte
print("Réponse format texte", response.text)
print()
# Conversion de la réponse en objet JSON
dico = json.loads(response.text)
# Récupération du jeton d'accès ainsi que sa durée de validité dans l'objet JSON
token = dico["access_token"]
expire = dico["expires_in"]
print("le jeton d'accès est : ", token, " et il est valable pendant : ", expire/60, " minutes.")
print()
# Définition de l'entête de la requête
headers = {'Authorization': f'Bearer {str(token)}'}
# Envoi de la requête GET avec l'entête d'autorisation
response = requests.get('https://api.pole-emploi.io/partenaire/offresdemploi/v2/offres/search?qualification=0&motsCles=informatique&commune=76322&origineOffre=2',
headers=headers)
# Conversion de la réponse en objet JSON
liste_jobs = json.loads(response.text)
# Connect to the database
cnx = mysql.connector.connect(user='root', password='rroot',
host='localhost', database='gabin.serrurot')
# Create a cursor object
cursor = cnx.cursor()
# Delete the database
query1 = "TRUNCATE `gabin.serrurot`.`api_poleemploi`"
cursor.execute(query1)
cnx.commit()
# value sert à enregistrer les résultats de la recherche
value = []
try:
for job in liste_jobs['resultats']:
"""print("L'intitulé du job est :", job['intitule'])
print()
print("La commune d'exercice est :", job['lieuTravail']['commune'])
print()
print("La description du job est :", job['description'])
print()
print("liste jobs :", liste_jobs['resultats'])"""
value.append((job['intitule'], job['lieuTravail']['commune'], job['description']))
value.append(("test", 47, "test"))
except:
print("Il n'y a pas de résultats avec cette recherche.")
# Execute a SQL query
query = "INSERT INTO api_poleemploi (intitule, commune, description) VALUES (%s, %s, %s)"
cursor.executemany(query, value)
cnx.commit()
# Close the cursor and connection
cursor.close()
cnx.close()
Mais encore une fois sachant que le code python fonctionne très bien seul ça me parait bizarre que le problème vienne de lui. La seule différence qu'il y a entre la situation avec deux fichiers et la situation avec un seul est la ligne avec le exec.
Je viens de me rendre compte de quelque chose. En continuant à chercher une solution, j'ai modifier mon code en remplaçant le exec par ceci :
$output=null;
$retval=null;
exec('combinaison.py', $output, $retval);
echo "Returned with status $retval and output:\n";
print_r($output);
que j'ai trouvé ailleurs. Il m'a affiché une erreur 127 ce qui signifie d'après mes recherches à un fichier inexistant si j'ai bien compris. J'imagine qu'on sort vachement du python donc je vais pas insister beaucoup ici mais si pour ma dernière chance ça peut t'aider à m'aider ?
- Edité par GabinSerrurot1 31 janvier 2023 à 22:41:15
Dans ton code PHP, tu as essayé avec shell_exec au lieu de exec.
Effectivement si ta BDD est modifié avec ton code python seul, le problème ne vient pas du code Python.
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard) La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Alors j'avoue ne pas avoir pensé à cette fonction là. J'ai essayé avec system au cas où mais pas shell_exec. Ces deux commandes ont un fonctionnement vraiment différent ?
Sans shebang (https://fr.wikipedia.org/wiki/Shebang), le script python donné ci-dessus ne peut pas être exécuté simplement en appelant le fichier. Les shebangs ne fonctionnent pas sur du Windows.
Il faudrait plutôt utiliser l'interpréteur
python script.py
Si «python» correspond à l'interpréteur sur ton système (ça pourrait être «py» ou «python3» ou «py.exe» par exemple).
Tu peux aussi passer le chemin du script en chemin absolu pour être sur que ce n'est pas un problème dû à l'environnement et au répertoire courant dans lequel ton script PHP s’exécute.
euh dans le php je lis "database=root" alors que dans python, je lis database='gabin.serrurot' ; c'est peut-être ça le souci non ?
Nan le problème ne vient pas de là malheureusement, le problème que tu soulèves vient de moi qui pour présenter du code source sur le forum modifie mes identifiants mais ils sont bien cohérents dans mes fichiers.
KoaTao a écrit:
Bonjour,
Sans shebang (https://fr.wikipedia.org/wiki/Shebang), le script python donné ci-dessus ne peut pas être exécuté simplement en appelant le fichier. Les shebangs ne fonctionnent pas sur du Windows.
Il faudrait plutôt utiliser l'interpréteur
python script.py
Si «python» correspond à l'interpréteur sur ton système (ça pourrait être «py» ou «python3» ou «py.exe» par exemple).
Tu peux aussi passer le chemin du script en chemin absolu pour être sur que ce n'est pas un problème dû à l'environnement et au répertoire courant dans lequel ton script PHP s’exécute.
Le serveur de mon établissement est sensible avec le système d'exploitation de mon PC ? Parce que je viens d'essayer avec shell_exec comme le suggère fred1599, j'ai essayé avec les combinaisons que tu proposes mais rien n'y fait.
Le gros problème juste que j'ai un code PHP qui fonctionne très bien, un code python qui fonctionne très bien mais je ne peux pas exécuter les deux codes en mêmes temps.
Exécuter un script python en back-end
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)