【问题标题】:How can I pass variable from PHP to Python?如何将变量从 PHP 传递到 Python?
【发布时间】:2012-08-30 13:19:33
【问题描述】:

我可以将变量从.php 脚本传递给Python,反之亦然吗?

例如:

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

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

【问题讨论】:

  • 有很多IPC methods。这取决于上下文哪种方法更可取。

标签: python php variables


【解决方案1】:

取决于您如何调用 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 脚本实际上一直在运行,并在端口 8888 上接受套接字连接(例如使用 HTTPlib)。此时,您可以使用 cURL 从 PHP 连接到 http://127.0.0.1:8888 并发送以 JSON 编码的结构化数据(因为 Python 有 JSON解码器;我不太确定 PHP 反序列化程序),并通过相同的路径返回信息。

从所有意图和目的来看,Python 脚本现在都是一种 Web 服务。您还可以在同一个 Web 服务接口下部署多个不同的脚本,并根据请求中发送的虚假 URI 选择哪个脚本来回答。

使用这种方法,您需要检查请求之间的状态是否正确隔离,即代表 Peter 请求数据处理不会导致返回属于 Paul 的数据;或者所有正在处理的数据都是不安全的,也就是说,它不需要安全或身份验证。

这种方法的另一个优点是缓存——python 脚本在 PHP 发出的请求之间保持活动状态,并且可以对已知问题返回相同的答案,而无需重新计算任何东西,如果这是可行的。有一些 Python 缓存框架可以随时插入。

另一个优势是,您可以通过将 Python 服务部署在不同的机器(不一定可从更广泛的 Internet 访问)甚至几台不同的机器上轻松扩展此方法。

【讨论】:

    【解决方案2】:

    一些选项:

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

    【讨论】:

      【解决方案3】:

      在文件系统的某处打开一个 unix 域套接字。像 /var/run 这样的地方。然后让您的进程像普通文件一样读取和写入它。繁荣。双向通信。

      【讨论】:

        【解决方案4】:

        对于传递的变量包含空格的场景。

        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]
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-11-02
          • 1970-01-01
          • 1970-01-01
          • 2015-02-03
          • 1970-01-01
          相关资源
          最近更新 更多