我正在构建一个Joomla 3网站,但我需要自定义相当多的页面。我知道我可以将PHP与Joomla一起使用,但它是否也可以使用Python?具体来说,我希望使用CherryPy编写一些自定义代码片段,但我希望它们显示在原生Joomla页面(而不仅仅是iFrames)中。这可能吗?
答案 0 :(得分:1)
从不同来源(Joomla和CherryPy)构建页面的最有效方法可能是使用Edge Side Includes esi。
基本上,您运行的Joomla实例提供包含ESI标记的文档。您运行CherryPy实例,该实例提供您要放在esi标记位置的部分。并且你运行一个支持ESI的反向代理,如varnish将它们拼接在一起。
这可能看起来像很多活动部件,但它会像......那些真正响应的东西一样响应。调整缓存部分,你可以减轻你的Joomla和数据库的工作量。
来自其他答案的exec
方式适用于打印某些内容的小python脚本,但不适用于CherryPy。
答案 1 :(得分:1)
PHP执行Python“脚本”
这适用于脚本,它可以执行操作并返回输出,而不适用于CherryPy。
<?php
// execute your Python script from PHP
$command = escapeshellcmd('myPythonScript.py');
$output = shell_exec($command);
echo $output;
// take response content to embed it into the page
?>
PHP访问Python / CherryPy服务网站
import cherrypy
class HelloWorld(object):
def index(self):
return "Hello World!"
index.exposed = True
cherrypy.quickstart(HelloWorld())
这会启动http://localhost:8080
,您应该看到Hello world!
。
现在,您可以通过访问它localhost:port
来访问CherryPy的输出。
性能不佳,但有效。
<?php
$output = file_get_contents('http://localhost:8080/');
echo $output;
?>
Joomla + Ajax访问Pyhton / CherryPy服务网站
另一种解决方案是,不使用PHP来获取内容,而是从客户端进行提取。基本上,你会使用一个Ajax-Request到CherryPy服务的网站,获取它的内容并将其嵌入到Joomla服务页面的dom中。
// add jQuery Ajax reqeust from your Joomla page to CherryPy
$.ajax({
url: "https://localhost:8080/", // <-- access the 2nd served website
type: 'GET',
success: function(res) {
//console.log(res);
alert(res);
$("#someElement").html(res);
}
});
答案 2 :(得分:0)
您可以通过php文件执行它。试试这个:
exec("python/path/your-script.py");
答案 3 :(得分:0)
这是可能的,但效率不高。
您可以使用exec()函数从PHP执行Python脚本: PHP代码:
exec("python /path/to/python-script.py");
还有各种类似的PHP函数可供使用 完成相同的事情与输入和方式的微小差异 处理输出(passthru,system,proc_open,反引号)。
Python脚本将使用其命令行界面执行 - 不使用CGI(或类似)界面,就像你在网上一样 服务器直接执行Python脚本。这意味着 Python脚本无法访问有关HTTP的信息 请求 - GET / POST值,客户端的IP地址,页面URL等。 您可以使用命令行将此信息从PHP传递到Python 参数,管道,临时文件或其他形式的 进程间通信,但你需要通过每一段 明确要求的信息。
这是效率低下的原因是因为每次调用exec都会 为Python脚本生成一个全新的进程。那是公平的 在每个HTTP请求上执行昂贵的操作(这就是服务器的原因) 像Apache和Fast-CGI之类的接口重用子进程和 线程而不是创建新的线程)。此外,如果你有更多 比起对exec的一次调用,每一个都会产生一个新的 过程
摘自here。
答案 4 :(得分:0)
在考虑Python之前
您想要自定义什么? (可能已经存在一些聪明的Javascript或Joomla扩展)
鉴于您使用的是Joomla,Joomla方式不是解决您问题的更好方法吗? (更改模板,特别是模块和组件的视图模板)
i.o.w。:你了解Joomla 足够知道你需要别的东西吗?见下文:
如果Python还有出路:
您的托管是否支持Python?
您是否应该重新考虑您选择的CMS?
我喜欢你选择的CherryPy。