Comment exécuter un script Python dans un programme PHP

WBOY
Libérer: 2023-03-16 19:48:02
avant
2568 Les gens l'ont consulté

(Tutoriel recommandé : Tutoriel vidéo PHP)

Présentez comment exécuter des scripts Python dans les programmes php,

L'exécution de programmes python en php repose principalement sur des fonctions d'exécution de programme,

Parlons-en ici Trois fonctions liées : exec(), system() et passthru().

Ici, nous parlons principalement de la fonction exec(), présentant comment utiliser cette fonction pour transmettre des paramètres,

et comment utiliser python pour renvoyer des données josn à utiliser par php.

1. exec()

Exécuter un programme externe

exec ( string $command [, array &$output [, int &$return_var ]] ) : string
Copier après la connexion

Description du paramètre :

commande : La commande à exécuter, qui comprend trois sous-chaînes. La première sous-chaîne est l'interpréteur du système actuel utilisé. la sous-chaîne est l'emplacement du script à exécuter, et la troisième sous-chaîne est un nombre illimité de paramètres qui doivent être transmis, séparés par des espaces, faites attention au format. Utilisez des espaces pour séparer les sous-chaînes.

output : Si le paramètre de sortie est fourni, ce tableau sera rempli avec la sortie de l'exécution de la commande, un élément dans le tableau pour chaque ligne de sortie. (Remarque : ce qui est stocké dans la sortie n'est pas la valeur de retour en python, et toutes les valeurs de retour ne seront pas enregistrées. Ce qui est stocké dans la sortie est la valeur de sortie dans le script python, qui correspond à toutes les données sorties par le fonction print())

return_var : Si les paramètres output et return_var sont fournis, l'état de retour après l'exécution de la commande sera écrit dans cette variable.

1. Exécutez directement

index.php

<?php
$re = exec(&#39;python ceshi.py&#39;, $out);
// $re = iconv(&#39;gbk&#39;, &#39;utf-8&#39;, $re);
var_dump($out);
echo &#39;<br/>&#39;;
var_dump($re);
Copier après la connexion

ceshi.py

def send():
    data = &#39;1,2,3,4,5&#39;
    print(data)
if __name__ == &#39;__main__&#39;:
    send()
Copier après la connexion

(Remarque importante : si les données renvoyées par le script Python contiennent du chinois, vous devez utiliser iconv('gbk', 'utf-8' , $re ); pour s'échapper)

2. Transmettez les paramètres et recevez les données de retour

inde.php

$canshu1 = &#39;这是PHP传过来的参数&#39;;
$canshu2 = date(&#39;Y-m-d&#39;);
$re = exec("python ceshi.py $canshu1 $canshu2");
$re = iconv(&#39;gbk&#39;, &#39;utf-8&#39;, $re);
var_dump($re);
Copier après la connexion

test.py

import sys
def send():
    # a1 = sys.argv[1]
    # a2 = sys.argv[2]
    re = sys.argv[1:]
    data = &#39;1,2,3,4,5,&#39; + &#39;,&#39;.join(re) # 转字符串
    print(data)
if __name__ == &#39;__main__&#39;:
    send()
Copier après la connexion

Importez le package sys et utilisez le tableau sys.argv[] pour obtenir les paramètres entrants, le paramètre entrant de la section Un est sys.argv[1], le second est sys.argv[2] et ainsi de suite. N'utilisez pas argv[0]

pour recevoir les données json renvoyées :

.
import sys
import json
def send():
    dict = {&#39;id&#39;:111, &#39;title&#39;:&#39;测试title&#39;}
    dict[&#39;data&#39;] = sys.argv[1:]
    jsonArr = json.dumps(dict, ensure_ascii=False)
    print(jsonArr)
if __name__ == &#39;__main__&#39;:
    send()
Copier après la connexion

(impliquant des caractères chinois, vous devez spécifier Ensure_ascii=False)

2. system()

Exécuter le programme externe et afficher la sortie

system ( string $command [, int &$return_var ] ) : string
Copier après la connexion

Identique à la version C du system() fonction, cette fonction exécute le paramètre de commande Spécifiez la commande et affichez les résultats de l'exécution.

Si PHP est exécuté dans le module serveur, la fonction system() tentera également d'actualiser automatiquement le cache de sortie du serveur Web après chaque ligne de sortie.

Si vous souhaitez obtenir le résultat brut d'une commande sans aucun traitement, veuillez utiliser la fonction passthru().

index.php

<?php
echo &#39;这是运行直接输出:&#39;;
$re = system(&#39;python ceshi.py&#39;);
// $re = iconv(&#39;gbk&#39;, &#39;utf-8&#39;, $re);
echo &#39;<br/>&#39;;
echo &#39;这是赋值输出:&#39;;
var_dump($re);
Copier après la connexion

La version originale de test.py est utilisée ici. L'effet de sortie est le suivant :

3. passthru()

Exécutez le programme externe et affichez la sortie

passthru ( string $command [, int &$return_var ] ) : void
Copier après la connexion
.

Identique à la fonction exec() De même, la fonction passthru() est également utilisée pour exécuter des commandes externes. Lorsque la commande Unix exécutée génère des données binaires et doit être transmise directement au navigateur, cette fonction doit être utilisée à la place de la fonction exec() ou system(). Couramment utilisé pour exécuter des commandes telles que pbmplus qui peuvent directement générer des flux d'images. En définissant Content-type sur image/gif puis en appelant le programme pbmplus pour générer un fichier gif, vous pouvez directement afficher l'image vers le navigateur à partir du script PHP.

index.php

echo &#39;这是运行直接输出:&#39;;
$re = passthru(&#39;python ceshi.py&#39;);
// $re = iconv(&#39;gbk&#39;, &#39;utf-8&#39;, $re);
echo &#39;<br/>&#39;;
echo &#39;这是赋值输出:&#39;;
var_dump($re);
Copier après la connexion

La version originale de test.py est utilisée ici, et l'effet de sortie est le suivant :

(Tutoriel recommandé : Tutoriel vidéo PHP)

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:
php
source:jb51.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