在PHP中调用Python

问题描述

根据您在做什么,system()popen()可能是完美的。如果Python脚本没有输出,或者您希望Python脚本的输出直接进入浏览器,请使用system()。如果要向Python脚本的标准输入中写入数据,或从PHP中的Python脚本的标准输出中读取数据,请使用popen()。popen()仅允许您读取或写入,而不能两者都读取。如果两者都需要,请签出proc_open(),但是在程序之间进行双向通信时,需要小心避免死锁,因为每个程序都在等待对方做某事。

如果要将用户提供的数据传递给Python脚本,则要注意的主要事情是命令注入。如果您不小心,则用户可以向您发送诸如“; evilcommand;”之类的数据。并让您的程序违反您的意愿执行任意命令。

escapeshellarg()escapeshellcmd()可以帮助解决这个问题,但是我个人喜欢使用类似以下的方法删除所有不是好的字符

preg_replace('/[^a-zA-Z0-9]/', '', $str)

解决方法

我有一个最近写的Python脚本,我使用命令行中的某些选项进行了调用。我现在想要一个非常薄的Web界面在Mac上本地调用此脚本。

我不想在Mac上安装mod_python或mod_wsgi时遇到麻烦,所以我只想从PHP执行system()或popen()来调用Python脚本。

还有更好的主意吗?提前致谢!

相关问答

如何检查配对的蓝牙设备是打印机还是扫描仪(Android)
是否允许实体正文进行HTTP DELETE请求?
如何将ZipInputStream转换为InputStream?
java.util.logging Java 8中的变量
PowerMockito.doReturn返回null
JavaMail问题:无法将命令发送到SMTP主机