【问题标题】:Passing Data from PHP to Python将数据从 PHP 传递到 Python
【发布时间】:2013-08-20 12:39:49
【问题描述】:

我目前正在尝试确定将数据从 PHP 脚本发送到 Python 脚本的最佳方式。但是请继续阅读,因为我已经查看了有关该主题的现有帖子。目前,我正在按照我读过的一篇文章的建议执行以下操作:

Example .php
$var1 = 2;
$tmp = exec(/var/www Example.py $var1);
echo "$tmp";

Example.py
import sys
print sys.argv[1]

这似乎工作正常。虽然它还处于早期阶段。 最终,PHP 脚本将发送从 HTML 表单生成的合理数量的数据,所以我想知道它是否是最有效的发送方式。

PHP、HTML 和 Python 脚本在Raspberry Pi 上运行,该Raspberry Pi 通过有线 LAN 连接到笔记本电脑。

最终我将不得不使用 TCP/IP 从另一个桌面读取各种命令,这些命令将通过 TCP/IP 发送出去(我无法更改这一点)所以我想知道现在初始化套接字是否更好然后使用此方法也将数据从 PHP 脚本发送到 Python。

我对这一系列语言很陌生,所以我只是在寻找建议,以便我可以进一步调查。我查看了其他各种帖子,但似乎没有一个与我想要做的匹配。

【问题讨论】:

  • 您必须使用 PHP,还是可以使用 Python 作为服务器端编程语言?
  • 除非您需要灵活地将一个进程移动到另一台机器上,否则您不需要套接字。读取标准输入,写入标准输出应该没问题。
  • 嗨 user2387370,不幸的是我已经用 html/php 编写了所有代码,所以如果可以的话,我想继续使用 php。我确实考虑过用 Python 替换它,但如果我可以在 php 中做我想做的事情,那么就没有必要了。
  • 嗨 Karoly Horvath,我认为套接字可能就是这种情况。稍后我将需要使用它们,因为我需要能够通过 TCP/IP 通信数据,我认为这需要套接字?为了将数据从 php 移动到 Python,我只访问同一系统上的不同应用程序。
  • 嗨,xaxxon,自从您发表评论以来,已经阅读了管道,我认为这可能是我要走的路。我会把一些测试代码放在一起,看看我是否可以让它按照我想要的方式工作。

标签: php python sockets ipc tcp-ip


【解决方案1】:

您可以使用像Gearman 这样的队列服务,客户端使用PHP,工作人员使用Python,反之亦然。

有人在这里创建了一个示例设置。

https://github.com/dbaltas/gearman-python-worker

【讨论】:

    【解决方案2】:

    试试ZeroMQ

    ØMQ(也称为 ZeroMQ、0MQ 或 zmq)看起来像一个可嵌入的 网络库,但就像一个并发框架。它给你 跨各种传输传输原子消息的套接字,例如 进程内、进程间、TCP 和多播。您可以连接套接字 N-to-N 模式,如扇出、发布-订阅、任务分配和 请求-回复。它的速度足以成为集群的结构 产品。它的异步 I/O 模型为您提供可扩展的多核 应用程序,构建为异步消息处理任务。它有一个 语言 API 的分数并在大多数操作系统上运行。 ØMQ 来自 iMatix 并且是 LGPLv3 开源。

    nanomsg(zeromq作者的新项目)

    nanomsg 是一个套接字库,提供了几种常见的通信方式 模式。它旨在使网络层快速、可扩展且 使用方便。在 C 中实现,它适用于广泛的操作 没有其他依赖关系的系统。

    类似问题的例子:Sending data to Python Script from PHP

    【讨论】:

      【解决方案3】:

      我假设 PHP 部分是某种 Web 应用程序。如果是这种情况,我会将 python 脚本隔离为 CGI 脚本/端点并与它们通信,使用标准 HTTP 请求传递和接收数据。所以你的 Python 脚本会变成:

      #!/usr/bin/python
      
      # Import modules for CGI handling 
      import cgi, cgitb, json 
      
      # Create instance of FieldStorage 
      form = cgi.FieldStorage() 
      
      # Get data from fields
      var1 = form.getvalue('var1')
      
      # Process data and possibly and up with complex output
      obj = {'one':1, 'two':2}
      
      # Make it output json  
      print "Content-type: application/json"
      print 
      print(json.JSONEncoder().encode(obj))  
      

      你从 php 调用类似:

      // Get cURL resource
      $curl = curl_init();
      curl_setopt_array($curl, array(
          CURLOPT_RETURNTRANSFER => 1,
          CURLOPT_URL => 'http://localhost/cgi-bin/example.py?var1=2',
          CURLOPT_USERAGENT => 'My Internal Request'
      ));
      $resp = curl_exec($curl);
      curl_close($curl);
      

      这将允许您将复杂的数据结构传递给 python 脚本并接收结构化响应 (json)。它还将模块化您应用程序的 python 部分并允许重用。最好的部分是您拥有 CGI 端点,因此您也可以使用套接字与它们进行通信。

      【讨论】:

        猜你喜欢
        • 2015-10-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-12
        • 2010-11-01
        • 2019-10-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多