8

我有一个 PHP 脚本 (news-generator.php),当我包含它时,它会抓取一堆新闻并打印出来。现在,我正在为我的网站 (CGI) 使用 Python。当我使用 PHP 时,我在“新闻”页面上使用了类似的内容:

<?php
print("<h1>News and Updates</h1>");
include("news-generator.php");
print("</body>");
?>

(为简单起见,我删减了示例。)

有没有办法让 Python 执行脚本(news-generator.php)并返回可以跨平台工作的输出?这样,我可以这样做:

page_html = "<h1>News and Updates</h1>"
news_script_output = php("news-generator.php") //should return a string
print page_html + news_script_output
4

5 回答 5

11
import subprocess

def php(script_path):
    p = subprocess.Popen(['php', script_path], stdout=subprocess.PIPE)
    result = p.communicate()[0]
    return result

# YOUR CODE BELOW:
page_html = "<h1>News and Updates</h1>"
news_script_output = php("news-generator.php") 
print page_html + news_script_output
于 2009-06-29T20:58:16.833 回答
7

PHP是一个程序。您可以使用subprocess运行任何程序。

困难的部分是模拟 PHP 所期望的整个 CGI 环境。

于 2009-06-29T20:57:03.560 回答
1

也许题外话,但是如果您想以一种可以访问由 php 脚本创建的 var 和此类(例如新闻项目数组)的方式执行此操作,那么最好的方法是执行 php 脚本,但是从 php 返回一个 json 编码的项目数组作为字符串,然后在 python 端对它们进行 json 解码,并在那里进行 html 生成和迭代。

于 2009-06-30T18:00:02.253 回答
0

我认为最好的答案是让 apache 分别渲染两个页面,然后使用 javascript 将该页面加载到 div 中。您的 ajax 负载略有放缓,但您不必担心。

有一个开源小部件可以在一页中运行多种语言,但我不记得它叫什么了。

于 2009-06-29T21:18:56.420 回答
0

您可以使用 urllib 从服务器(localhost)获取页面并在正确的 php 环境中执行它。不漂亮,但它会工作。如果您经常这样做,可能会导致性能问题。

于 2009-06-30T00:55:49.350 回答