在PHP中调用Python
时间:2020-03-06 15:04:32 来源:igfitidea点击:
我有一个最近写的Python脚本,我使用命令行中的某些选项进行了调用。我现在想要一个非常薄的Web界面在Mac上本地调用此脚本。
我不想在Mac上安装mod_python或者mod_wsgi时遇到麻烦,所以我只想从PHP执行system()或者popen()来调用Python脚本。
还有更好的主意吗?提前致谢!
解决方案
根据我们在做什么,system()或者popen()可能是完美的。如果Python脚本没有输出,或者我们希望Python脚本的输出直接进入浏览器,请使用system()。如果要向Python脚本的标准输入中写入数据,或者从php中的Python脚本的标准输出中读取数据,请使用popen()。 popen()仅允许我们读取或者写入,而不能两者都读取。如果两者都需要,请签出proc_open(),但是在程序之间进行双向通信时,我们需要小心避免死锁,因为每个程序都在等待对方做某事。
如果要将用户提供的数据传递给Python脚本,那么要注意的一件大事是命令注入。如果我们不小心,用户可以向我们发送数据,例如"; evilcommand;"并让程序违背意愿执行任意命令。
escapeshellarg()和escapeshellcmd()可以帮助解决这个问题,但是我个人喜欢使用类似以下的方法删除所有不是好的字符
preg_replace('/[^a-zA-Z0-9]/', '', $str)
对于无聊的脚本,我一直都在做这种事情。使用仅使用system / popen调用某些外部程序的CGI或者PHP脚本是很常见的。
如果Web服务器对Internet完全开放,请格外小心。在这种情况下,请确保清理GET / POST输入,以免攻击者在计算机上运行任意命令。
还有一个PHP扩展:PHP中的Pip Python,我从没尝试过,但是在这种情况下将其添加为书签