2009-06-29 4 views
6

У меня есть PHP-скрипт (news-generator.php), который, когда я его включаю, захватывает кучу новостей и печатает их. Прямо сейчас, я использую Python для своего сайта (CGI). Когда я использую PHP, я использовал что-то вроде этого на странице «Новости»:Как включить PHP-скрипт в Python?

<?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 
+1

«Я упростил пример для простоты». - Что еще вы бы упростили? ;) –

+0

@musicfreak: хихикает? эффективность? красота? –

+1

Я работал с людьми, которые «упростили пример», чтобы скрыть свою некомпетентность. Надеюсь, это не так. –

ответ

9
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 
+0

Единственная проблема, как отметил С.Лотт, моделировать среду CGI, которую хочет PHP. – alecwh

7

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

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

+0

Хорошая точка. Я полагаю, зависит от того, какой PHP вы используете. – Eli

+0

Предполагается ли PHP-CLI такой тип среды? –

+0

PHP CGI ожидает много окружающей среды. По-видимому, CLI требует гораздо меньших экологических настроек. Вот окончательный документ. http://www.php.net/manual/en/features.commandline.php. –

0

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

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

0

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

1

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