Maison > Article > développement back-end > Comment exécuter un script Python dans un programme PHP
(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.
Exécuter un programme externe
exec ( string $command [, array &$output [, int &$return_var ]] ) : string
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.
index.php
<?php $re = exec('python ceshi.py', $out); // $re = iconv('gbk', 'utf-8', $re); var_dump($out); echo '<br/>'; var_dump($re);
ceshi.py
def send(): data = '1,2,3,4,5' print(data) if __name__ == '__main__': send()
(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)
inde.php
$canshu1 = '这是PHP传过来的参数'; $canshu2 = date('Y-m-d'); $re = exec("python ceshi.py $canshu1 $canshu2"); $re = iconv('gbk', 'utf-8', $re); var_dump($re);
test.py
import sys def send(): # a1 = sys.argv[1] # a2 = sys.argv[2] re = sys.argv[1:] data = '1,2,3,4,5,' + ','.join(re) # 转字符串 print(data) if __name__ == '__main__': send()
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 = {'id':111, 'title':'测试title'} dict['data'] = sys.argv[1:] jsonArr = json.dumps(dict, ensure_ascii=False) print(jsonArr) if __name__ == '__main__': send()
(impliquant des caractères chinois, vous devez spécifier Ensure_ascii=False)
Exécuter le programme externe et afficher la sortie
system ( string $command [, int &$return_var ] ) : string
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 '这是运行直接输出:'; $re = system('python ceshi.py'); // $re = iconv('gbk', 'utf-8', $re); echo '<br/>'; echo '这是赋值输出:'; var_dump($re);
La version originale de test.py est utilisée ici. L'effet de sortie est le suivant :
Exécutez le programme externe et affichez la sortie
passthru ( string $command [, int &$return_var ] ) : void.
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 '这是运行直接输出:'; $re = passthru('python ceshi.py'); // $re = iconv('gbk', 'utf-8', $re); echo '<br/>'; echo '这是赋值输出:'; var_dump($re);
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!