【问题标题】:Send data from php to python and back将数据从 php 发送到 python 并返回
【发布时间】:2013-07-08 17:36:13
【问题描述】:

我一直在寻找如何通过PHP成功exec一个Python脚本,只是为了测试而已。

自从我用 PHP 编程以来,我从未真正使用过 Python,但我一直在寻找一个简单的代码来将数据从 PHP 发送到 Python,然后在 .py 中将数据发送回 PHP。

我在 PHP 中尝试过exec,无论有无 json enc/dec,都没有成功。

这些是我在 PHP 中尝试过的命令:

* $result = shell_exec('pythontest.py' . escapeshellarg(json_encode($data)));
* exec("python pythontest.py", $resultData);
  var_dump($resultData);

没有成功。

pythontest.py:一个打印发送回数据。

尝试了 Python 和 pythontest.py (PHP) 的完整路径。

带有 json 的 enc/dec 在 PHP 文件中工作,因此 PHP 代码中似乎没有任何问题,但我仍然无法运行脚本!

正如我所说,我以前没有使用过 Python,所以我想知道除了在脚本中编写代码以使其工作之外,是否还需要更多的东西?

我看过很多关于这个的帖子,并尝试了他们的代码“对他们有用”,但对我没有用^^

附加信息:PHP 通过 WAMP,.py 在同一地图中。它应该是基于网络的,如果这会有所不同的话。

【问题讨论】:

标签: php python


【解决方案1】:

检查以确保包含 python.exe 的目录位于 PHP 脚本的 PATH 中(通过 getenv('PATH'))。

尝试通过 Windows 命令提示符直接运行 python c:\path\to\pythontest.py。那样有用吗?如果没有,请从那里调试 PATH 和问题,然后在 PHP 中重试。

如果您的 WAMP 堆栈以有限的权限运行 PHP,请检查以确保用户对 python.exe 文件以及包含它的整个目录具有“读取和执行”类型的权限,递归。 这可能有点矫枉过正,但在整个 python 分发目录中为该用户递归设置权限可以排除与权限相关的问题。

尝试使用.exe 限定python 可执行文件的名称,例如c:\python27\python.exe pythontest.py(你可能已经尝试过,因为你说你尝试过“完整路径”,但我把它扔在那里以确保你包含.exe)。

尝试将pythontest.py 的内容替换为非常简单的内容(例如print 'hello')并检查行为是否发生变化。

另外,请张贴pythontest.py的内容(或至少第一行)。

【讨论】:

  • 我尝试使用 setenv 更改路径,测试的完整代码在您的回答下,首先路径是 system32,我使用 setenv 将其更改为 python.exe 文件夹,使用 getenv 检查并显示新路径。在我的 .py 文件中,我现在有 print("hello") 并且可以通过 cmd 执行它,但仍然不是 php!我已经检查了文件夹/文件的权限,并且每个用户都可以读取和执行,还添加了具有完全权限的“每个人”以确保。我在权限、python 代码或路径方面做错了吗?
  • 嗯。你有没有机会在 WAMP 中禁用这些功能? (cyberciti.biz/faq/…)。当您尝试运行正常的系统命令(例如“dir”)时会发生什么?
  • 查看 .ini 并没有禁用任何内容,并且 dir 命令可以正常工作。
  • 你能发帖或链接到你的php.ini吗?
  • 由于我的公司防火墙,我无法访问它。我回家的时候会试着看看它。尝试将与 safe_mode 相关的设置设置为最混杂的可能值:这不是您在生产中应该做的事情,但它可能有助于隔离问题。
【解决方案2】:

我现在尝试更改路径,因为python.exe 不在同一个目录中。 我的最终结果是

$output = getenv('PATH'); echo "Real Path: " . $output . "<br>"; $ret = apache_getenv("PATH"); echo "Apache Path: " . $ret . "<br>"; apache_setenv("PATH", "C:/Python33"); $ret = apache_getenv("PATH"); echo "Apache new path: " . $ret . "<br>"; $output = getenv('PATH'); echo "Real path, hopefully changed: " . $output . "<br>";

这只是为了看看我是否可以改变路径,因为我以前从未这样做过。 我现在只有

import sys, json print ("hello")

在我的 python 文件中并尝试通过 cmd 运行它,它工作。 但是当我尝试用 php 运行它时,它再次失败。 我还查看了权限: 管理员,用户有权读取和执行,我什至添加了对文件夹和子文件夹/文件具有完全权限的“每个人”,只是为了看看这是否有任何区别。 我错过了什么,或者我在权限、python 代码或路径方面做错了什么?

【讨论】:

    猜你喜欢
    • 2013-03-29
    • 2014-10-17
    • 1970-01-01
    • 2018-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多