如何将变量从PHP传递到Python?

时间:2012-08-30 13:19:34

标签: php python

如何将.PHP脚本中的变量传递给Python,反之亦然?

e.g

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

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

4 个答案:

答案 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)

一些选项:

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

答案 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]