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

2024-04-29 17:02:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我的LAMP服务器是centos7.4,带有apache2.4、php5.4和python3.6。在

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

我回顾了很多类似的问题。答案是exec()passthru()system(),和{}。它们是危险的命令,不应该在PHP中启用。在

Python official manual, "Integrating Python With Other Languages"中,只提到了两个工具,ppython和{}。 ppython似乎不再被维护,但这正是我需要的,就像使用R时的Rserve

我还读了this post

Simple and standard solution is using Socket or Webservice(API)

现在,如何在PHP中运行Python脚本而不使用exec()system()…(可能是套接字通信)?在


Tags: 答案命令服务器withmanualsystemexecphp
2条回答

如果你不知道如何使用它,一切都是危险的(即使是叉子)。你有几种选择:

  1. 标准:使用exec()/shell_exec()等在PHP中运行Python解释器。另外,运行Python编译的字节码会有很小的延迟和能力,因此性能在这里获胜。

  2. 非标准:如果您非常关心手头的安全问题,我建议您最好将Python命令插入某些批处理表中,并使用CRON调度器定期运行这些命令。执行之后,使用PHP获取结果。通过这种方式,PHP/Python的执行将不耦合,您将更好地控制如何/何时执行Python脚本。

  3. 非标准的(不惜一切代价避免):您提到的项目被移到Git的php-python。它只需在端口21230上启动一个新的Python server,然后等待来自PHP脚本的Python命令。现在,这些解决方案是一个最危险的解决方案,,因为web服务器中有额外的开放端口,这是管理员非常头疼的问题,因此强烈建议不要使用。

  4. 最后一种选择是质疑一种假设,即在PHP的web开发中根本需要Python。公司的语言越多,维护所有源代码就越困难,新功能/错误修复的上市时间也就越难。因此,在考虑Python脚本的执行之前,首先考虑将它们重写到普通PHP中。在

    您可以这样做automatically,但是这些类型的转换器非常容易出错并且不完整-例如,这一种不支持imports。(他妈的怎么了?Python没有进口就像面包没有面粉)。第二种选择是学习Python并将手头的代码重新编写到PHP中。或者简单地获取客户需求并将其编码到PHP中。所有可以用Python完成的事情,也可以用PHP完成(至少从web开发的角度来看)。

将Python脚本转换为Django restapi,然后使用cURL调用它。在

相关问题 更多 >