如何将变量从PHP传递到Python


How can I pass variable from PHP to Python?

是否可以将变量从.php脚本传递给Python,反之亦然?。

例如:

//myPHPScript.php 
$hello = 'hello'; 
//myPythonScript.py
print(get the result from $hello variable found in myPHPScript.php) 

取决于如何调用Python脚本。例如,如果你通过system()来实现,你可以把它放在参数中:

$hello = 'world';
$result = shell_exec('/path/to/python /path/to/your/script.py ' . $hello);

和Python中的

import sys
who = sys.argv[1]
print "Hello %s" % who

现在PHP中的$result将包含"Hello world"。

一种更具性能的可能性是一种"fastcgi方法",这种可能性并不总是可能的,但值得考虑;您的Python脚本实际上总是在运行,并接受端口8888上的套接字连接(例如使用HTTPlib)。这时,您可以使用cURL从PHP连接到http://127.0.0.1:8888,并发送用JSON编码的结构化数据(因为Python有一个JSON解码器;我不太确定PHP的非序列化程序),然后通过相同的路径返回信息。

Python脚本现在实际上是一个web服务。您还可以在同一个web服务接口下部署几个不同的脚本,并根据请求中发送的假URI来选择哪个脚本将应答。

使用这种方法,您需要检查请求之间的状态是否正确隔离,即,代表Peter请求数据处理不会导致返回属于Paul的数据;或者所有正在处理的数据都是不安全的,也就是说,它不需要安全性或身份验证。

这种方法的另一个优点是缓存——python脚本在从PHP发出的请求之间保持活动,并且如果可行的话,可以对已知问题返回相同的答案,而无需重新计算任何内容。有一些Python的缓存框架可以随时插入

另一个优点是,您可以通过在不同的机器(不一定可以从更广泛的互联网访问),甚至在几个不同的机器上部署Python服务来轻松扩展这种方法。

一些选项:

  • 让PHP使用某种格式(例如JSON或其他格式)将变量写入文件,让python程序读取文件(但要考虑一下:当多个进程尝试读取/写入时会发生什么?)
  • 让PHP将其数据存储在数据库中,并且python脚本从同一个数据库中读取(数据库应该处理并发)
  • 让一个进程调用另一个进程,通过stdin/stdout(规避文件)传递数据
  • 使用适合您的平台的其他形式的进程间通信

在filesysytem上的某个位置打开一个unix域套接字。像/var/run这样的地方。然后让您的进程像普通文件一样对其进行读写操作。繁荣双向通信。

对于传递的变量包含空格的场景。

PHP

<?php
$who = "my name";
shell_exec("/path/to/python /path/to/script.py '"$who'" ");

巨蟒

import sys
if len(sys.argv) > 1:
    who = sys.argv[1]