我能否在.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脚本实际上一直在运行并接受套接字连接(例如使用HTTPlib)在端口8888上。此时,您可以使用cURL从PHP连接到http://127.0.0.1:8888
并发送编码为JSON的结构化数据(因为Python有一个JSON解码器;我不确定是否有PHP反序列化程序),并通过相同的路径返回信息。
Python脚本现在实际上是一个Web服务。您还可以在同一Web服务界面下部署几个不同的脚本,并根据请求中发送的虚拟URI选择哪个脚本来回答。
使用这种方法,您需要检查请求之间的状态是否得到了正确的隔离,即代表Peter进行的数据处理不会导致返回属于Paul的数据;或者所有正在处理的数据都是不安全的,即它不需要安全或身份验证。
这种方法的另一个优点是缓存- Python脚本在从PHP发出请求时保持活动状态,如果可能的话,可以返回相同的答案给已知问题,而无需重新计算任何内容。有缓存框架可供插入Python。
另一个优点是,您可以通过在不同的机器上(不一定需要从更广泛的Internet访问)或甚至几台不同的机器上部署Python服务来轻松扩展此方法。
一些选项:
在文件系统的某个地方打开一个Unix域套接字。比如/var/run。然后让您的进程像普通文件一样读写它。嘭。双向通信。
对于传递的变量包含空格的情况。
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]