如何将.PHP脚本中的变量传递给Python,反之亦然?
e.g
//myPHPScript.php
$hello = 'hello';
//myPythonScript.py
print(get the result from $hello variable found in myPHPScript.php)
答案 0 :(得分:12)
取决于您如何调用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”。
更高效的可能性,并非总是可行但值得考虑,是一种“快速方法”;你的Python脚本实际上总是在运行并接受套接字连接(例如使用HTTPlib),比如端口8888.此时你可以使用cURL从PHP连接到http://127.0.0.1:8888
并发送用JSON编码的结构化数据(因为Python有一个JSON解码器;我不太确定PHP反序列化器),并通过相同的路径返回信息。
现在,对于所有意图和目的,Python脚本都是一个Web服务。您还可以在同一个Web服务接口下部署多个不同的脚本,并根据请求中发送的伪URI选择要回答的脚本。
使用这种方法,您需要检查请求之间的状态是否被正确隔离,即,代表Peter请求数据处理不会导致返回属于Paul的数据;或者所有正在处理的数据都是不安全的,也就是说,它不需要安全性或身份验证。
这种方法的另一个优点是缓存 - python脚本在从PHP发出的请求之间保持活跃,并且可以返回已知问题的相同答案,而不需要重新计算任何内容,如果可行的话。有一些Python的缓存框架可以插入。
另一个优点是,您可以通过在不同的计算机上部署Python服务(不一定可以从更广泛的Internet访问)或甚至几台不同的计算机来轻松扩展此方法。
答案 1 :(得分:2)
一些选项:
答案 2 :(得分:0)
在filesysytem上的某处打开一个unix域套接字。某处像/ var / run。然后像普通文件一样读取和写入进程。繁荣。双向通信。
答案 3 :(得分:0)
对于要传递的变量包含空格的情况。
PHP :
<?php
$who = "my name";
shell_exec("/path/to/python /path/to/script.py \"$who\" ");
PYTHON :
import sys
if len(sys.argv) > 1:
who = sys.argv[1]