繁体   English   中英

如何在不使用`exec()`,`system()`的情况下在PHP中运行Python脚本?

[英]How do I run a Python script in PHP without using `exec()`,` system()` …?

我的LAMP服务器是带有Apache 2.4,PHP 5.4和Python 3.6的CentOS 7.4。

我是Python的新手。 我刚刚从R迁移到Python。 我需要一些Python包来进行统计,然后将输出传递到PHP。

我复习了许多类似的问题。 答案围绕exec()passthru()system()shell_exec() 它们是危险的命令,不应在PHP中启用。

Python官方手册“将Python与其他语言集成”中 ,仅提到了两个工具, ppythonPHP "Serialize" in Python ppython似乎不再维护,但这就是我所需要的,就像我使用R时的Rserve一样。

我也读了这篇文章

简单而标准的解决方案是使用Socket或Webservice(API)

现在,如何不使用exec()system() ...(也许是套接字通信)在PHP中运行Python脚本?

将您的Python脚本转换为Django REST API,然后使用cURL对其进行调用。

如果您不知道如何使用,一切都是危险的(甚至是叉子)。 好吧,您有几种选择:

  1. 标准 :使用exec() / shell_exec()等在PHP中运行Python解释器。此外,运行Python编译后的字节码的延迟小,并且具有运行此功能的能力,因此在这里可以赢得性能。

  2. 非标准的 :如果您担心手头的安全性问题,我建议最好将Python命令插入某些批处理表中,并使用CRON调度程序定期运行这些命令。 执行后,使用PHP提取结果。 这样,PHP / Python执行将被解耦,您将可以更好地控制如何/何时执行Python脚本。

  3. 非标准 (不惜一切代价避免) :您提到的项目已通过php-python移至Git。 它只是在端口21230上启动新的Python server ,并等待来自PHP脚本的Python命令。 现在, 这些解决方案是最危险的解决方案 ,因为Web服务器中增加了开放的端口,这使管理员头疼不已,因此不建议使用。

  4. 最后一个选择是质疑一个假设,即在PHP的Web开发中根本需要 Python。 公司IT农场中使用的语言越多-维护所有资源的难度就越大,并且新功能/错误修复的上市时间也就越难。 因此,在考虑执行Python脚本之前,首先考虑将其重写为纯PHP

    您可以自动执行此操作,但是这些类型的翻译器很容易出错且不完整-例如,这种翻译器不支持imports (该死吗?没有输入的Python就像没有面粉的面包一样)。 第二种选择是学习Python并将手头的代码重写为PHP。 或者只是获得客户需求并将其编码到PHP中。 可以在Python中完成的所有操作,也可以在PHP中完成(至少从Web开发的角度来看)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM