我可以将变量从.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
现在$result
在 PHP 中将包含“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 缓存框架。
另一个优点是,您可以通过将 Python 服务部署在不同的机器(不一定可以从更广泛的 Internet 访问)甚至几台不同的机器上轻松扩展此方法。
一些选项:
在文件系统的某处打开一个 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]