当前位置:  开发笔记 > 编程语言 > 正文

用PHP调用Python

如何解决《用PHP调用Python》经验,为你挑选了5个好方法。

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

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

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



1> Andru Luvisi..:

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

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

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

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


@Nick Stinemates:我们正在讨论PHP函数;)

2> user..:

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

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

hello = "hello"
world = "world"
print hello + " " + world

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

$python = `python python.py`;
echo $python;



3> enobrev..:

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


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

4> Idealmind..:

你可以通过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);

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

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



5> Eli Courtwri..:

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

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

推荐阅读
李桂平2402851397
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有