Une brève discussion sur la façon d'exécuter des scripts Python en PHP

青灯夜游
Libérer: 2023-04-09 20:24:02
avant
4454 Les gens l'ont consulté

Cet article vous présentera comment exécuter des scripts Python en PHP. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il sera utile à tout le monde.

Une brève discussion sur la façon d'exécuter des scripts Python en PHP

Remarque : L'environnement dans lequel ce problème s'est produit est qu'il est recommandé d'utiliser IIS+PHP pour appeler le script Python dans l'environnement Windows et le principe échoue. Si votre environnement ne correspond pas à l'environnement de cette question. Veuillez éviter automatiquement.

Lorsque l'analyse de la demande de produits atteint un certain stade, une certaine coordination entre les différents départements est requise. Ensuite, lorsque nous effectuons du développement full-stack, nous devons coordonner tous ces éléments de manière générale. Il est également nécessaire d'activer simultanément différents modules et différents langages de développement en arrière-plan.

Tout d'abord, l'arrière-plan utilise un environnement IIS+PHP et fonctionne sous Windows. Appelez des programmes Python via PHP.

Parlons d'abord du problème : en partant du principe que Python et PHP sont ajoutés aux variables d'environnement du système (et peuvent s'exécuter normalement en mode cmd), exécutez a.php pour appeler 1.py

PHPcode (a.php)

$result = exec("py 1.py");
var_dump($result);
Copier après la connexion

Code Python (1.py)

print("123");
fl=open('test3.txt', 'w')
fl.write("5,5,5,1,2,3")
fl.close()
Copier après la connexion

Les deux fichiers répertoire sont dans le même répertoire. Et IIS dispose d'autorisations exécutables suffisantes (afin de reproduire le problème, j'ai écrit le code le plus simple), puis une erreur d'exécution s'est produite.

Ensuite, j'ai amélioré le code PHP et vérifié le code d'état d'erreur de l'exécution de la fonction exec

$result = exec("py 1.py", $array, $ret);
var_dump($result);
var_dump($array);
var_dump($ret);
Copier après la connexion

Le code d'erreur s'est avéré être 103 (erreur d'exécution)

[Recommandé étude : "Tutoriel vidéo PHP》]

Cette fois, j'ai changé le bash dans la fonction exec en sortie standard (afin de déterminer le message d'erreur spécifique)

PS : En bash 0, les trois chiffres 1 et 2 représentent STDIN_FILENO, STDOUT_FILENO et STDERR_FILENO, qui sont une entrée standard (généralement le clavier), une sortie standard (généralement l'écran d'affichage ou la console du terminal utilisateur pour être précis) et une erreur standard. (sortie d'informations d'erreur).

$result = exec("py 1.py 2>error.txt", $array, $ret);
var_dump($result);
var_dump($array);
var_dump($ret);
Copier après la connexion

Après l'exécution de cette fois, lors de l'ouverture du fichier error.txt, une erreur du type Impossible de trouver un Python par défaut est apparue : Impossible de trouver un Python par défaut (le principe est que j'ai ajouté python à la variable d'environnement. et je peux exécuter le fichier py directement dans l'état cmd), j'ai l'impression d'avoir rencontré une erreur que je ne peux pas exprimer. Après avoir entièrement vérifié les erreurs telles que les variables d'environnement et les autorisations exécutables. J'ai inconsciemment changé l'instruction d'exécution dans exec en

"python 1.py 2>error.txt"
Copier après la connexion

Cette fois, l'erreur que j'ai eue était en fait ['python' n'est pas une commande interne ou externe, ni un programme exploitable ou un fichier batch. 】Je me doutais même que cet ordinateur avait sa propre idée. Juste après avoir parcouru toutes les informations. Je me suis soudainement souvenu que cela pourrait être dû au fait que PHP s'exécute sur le serveur IIS, mais que IIS ne dispose pas de toutes les autorisations utilisateur (c'est à la fois l'avantage et l'inconvénient du contrôle des autorisations du répertoire de sites Web IIS). Combiné avec les erreurs signalées dans le fichier error.txt précédent. Je vais apporter quelques modifications au code.

$res = exec("你python的安装绝对路径/python.exe 1.py 2>error.txt", $array, $ret);
var_dump($result);
var_dump($array);
var_dump($ret);
Copier après la connexion

Ajoutez ensuite une autorisation exécutable de contrôle utilisateur IIS au propriétaire de l'utilisateur de tous les fichiers sous le fichier python.

Cette fois, PHP a pu trouver l'exécutable Python et exécuter avec succès notre code.

PS : IIS+Windows est vraiment un trou noir.

Pour plus de connaissances sur la programmation, veuillez visiter : Vidéo de programmation ! !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:csdn.net
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal