用PHP调用Python

Ben*_*ong 77 php python

我有一个我最近编写的Python脚本,我使用命令行调用了一些选项.我现在想要一个非常瘦的Web界面来在我的Mac上本地调用此脚本.

我不想经历在我的Mac上安装mod_python或mod_wsgi的小麻烦,所以我只是从PHP做一个system()或popen()来调用Python脚本.

有更好的想法吗?提前致谢!

And*_*isi 102

根据您的工作,system()popen()可能是完美的.如果Python脚本没有输出,或者您希望Python脚本的输出直接进入浏览器,请使用system().如果要将数据写入Python脚本的标准输入,或者从Python脚本的标准输出中读取数据,请使用popen().popen()只会让你读或写,但不能同时读和写.如果你想要两者,请查看proc_open(),但是在程序之间进行双向通信时,需要注意避免死锁,每个程序都在等待另一个程序执行某些操作.

如果要将用户提供的数据传递给Python脚本,那么最重要的是注入命令.如果您不小心,您的用户可能会向您发送"; evilcommand;"等数据 并使你的程序违背你的意愿执行任意命令.

escapeshellarg()escapeshellcmd()可以帮助解决这个问题,但我个人希望删除所有不是已知好角色的东西,使用像

preg_replace('/[^a-zA-Z0-9]/', '', $str)
Run Code Online (Sandbox Code Playgroud)

  • @Nick Stinemates:我们正在讨论PHP函数;) (6认同)

use*_*ser 26

反引号运算符还允许您使用与上面类似的语法运行python脚本

在一个名为python.py的python文件中:

hello = "hello"
world = "world"
print hello + " " + world
Run Code Online (Sandbox Code Playgroud)

在一个名为python.php的php文件中:

$python = `python python.py`;
echo $python;
Run Code Online (Sandbox Code Playgroud)


eno*_*rev 15

还有一个PHP扩展:Pip - PHP中的Python,我从来没有尝试过但只是为这样的场合添加了书签

  • 请注意,"pip"这个名称也用于描述极受欢迎且相当标准的Python包管理工具,因此这个PHP工具的名称非常糟糕,令人困惑且注定失败.也许这就是为什么它没有被更新这么久. (9认同)
  • 看起来它还在继续(没有糟糕的名字选择)https://github.com/jparise/php-python (2认同)

Ide*_*ind 11

你可以通过php运行python脚本,并在浏览器上输出.

基本上你必须这样调用python脚本:

$command = "python /path/to/python_script.py 2>&1";
$pid = popen( $command,"r");
while( !feof( $pid ) )
{
 echo fread($pid, 256);
 flush();
 ob_flush();
 usleep(100000);
}
pclose($pid);
Run Code Online (Sandbox Code Playgroud)

注意:如果你在python代码中运行任何time.sleep(),它将不会在浏览器上输出结果.

要使完整代码正常工作,请访问如何从php执行python脚本并在浏览器上显示输出


Eli*_*ght 7

我总是为快速和脏的脚本做这种事情.拥有一个只使用system/popen来调用某些外部程序的CGI或PHP脚本是很常见的.

如果您的网络服务器对整个互联网开放,请格外小心.在这种情况下,请务必清理GET/POST输入,以免攻击者在您的计算机上运行任意命令.