在 PHP 中调用 Python
我有一个我最近写的Python脚本,我使用带有一些选项的命令行调用它。我现在想要一个非常薄的Web界面,以便在我的Mac上本地调用此脚本。
我不想在我的Mac上安装mod_python或mod_wsgi的小麻烦,所以我只是打算从PHP做一个system()或popen()来调用Python脚本。
有什么更好的想法吗?提前致谢!
我有一个我最近写的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)
shell_exec() 运算符还允许您使用与上述语法类似的语法运行python脚本
在一个名为 python.py 的 python 文件中:
hello = "hello"
world = "world"
print hello + " " + world
在一个名为 python 的 php 文件中.php:
$python = shell_exec(python python.py);
echo $python;