如何从PHP传递变量到Python?

4

我能否在.php脚本和Python之间传递变量?

例如:

//myPHPScript.php 
$hello = 'hello'; 

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

1
有众多的进程间通信方法。哪种方法更好取决于具体情况。 - jfs
4个回答

17

取决于你如何调用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服务来轻松扩展此方法。


2

一些选项:

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

0

在文件系统的某个地方打开一个Unix域套接字。比如/var/run。然后让您的进程像普通文件一样读写它。嘭。双向通信。


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]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接