Как мне включить PHP-скрипт в Python? - PullRequest
7 голосов
/ 30 июня 2009

У меня есть PHP-скрипт (news-generator.php), который, когда я включаю его, захватывает кучу новостей и печатает их. Прямо сейчас я использую Python для своего сайта (CGI). Когда я использовал 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

Ответы [ 5 ]

10 голосов
/ 30 июня 2009
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
7 голосов
/ 30 июня 2009

PHP - это программа. Вы можете запустить любую программу с подпроцессом .

Сложная часть моделирует всю среду CGI, которую ожидает PHP.

1 голос
/ 30 июня 2009

может быть и не по теме, но если вы хотите сделать это таким образом, чтобы вы могли получить доступ к переменным и тому подобному, созданному сценарием php (например, массивом новостей), вам лучше всего выполнить exec из php-скрипт, но верните json-кодированный массив элементов из php в виде строки, затем json декодирует их на стороне Python и выполняет генерацию и итерацию html там.

0 голосов
/ 30 июня 2009

Вы можете использовать urllib, чтобы получить страницу с сервера (localhost) и запустить ее в подходящей среде для php. Не красиво, но это сработает. Это может вызвать проблемы с производительностью, если вы делаете это много.

0 голосов
/ 30 июня 2009

Я думаю, что лучшим решением было бы сделать так, чтобы apache отображал обе страницы отдельно, а затем использовал javascript для загрузки этой страницы в div. У вас небольшое замедление загрузки AJAX, но вам не нужно беспокоиться об этом.

Существует виджет с открытым исходным кодом, который будет работать на нескольких языках на 1 странице, но я не могу вспомнить, как он называется.

...