2009-06-29 16 views
6

Ho uno script PHP (news-generator.php) che, quando lo includo, cattura un gruppo di notizie e le stampa. In questo momento sto usando Python per il mio sito web (CGI). Quando stavo usando PHP, ho usato qualcosa di simile nella pagina "News":Come posso includere uno script PHP in Python?

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

(ho tagliato verso il basso l'esempio per semplicità.)

C'è un modo ho potuto fare Python eseguire lo script (news-generator.php) e restituire l'output che funzionerebbe su più piattaforme? In questo modo, potrei fare questo:

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

"Ho semplificato l'esempio per semplicità." - Cos'altro vorresti che semplificasse? ;) –

+0

@musicfreak: giggles? efficienza? bellezza? –

+1

Ho lavorato con persone che hanno "semplificato l'esempio" per oscurare la loro incompetenza. Spero che non sia il caso qui. –

risposta

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

L'unico problema è, come menzionato da S.Lott, la simulazione dell'ambiente CGI richiesto da PHP. – alecwh

7

PHP è un programma. È possibile eseguire qualsiasi programma con subprocess.

La parte difficile è la simulazione dell'intero ambiente CGI che PHP si aspetta.

+0

Buon punto. Dipende dal tipo di PHP che stai usando, suppongo. – Eli

+0

PHP-CLI si aspetta questo tipo di ambiente? –

+0

PHP CGI si aspetta un sacco di ambiente. La CLI sembra richiedere un setup ambientale molto inferiore. Ecco il documento definitivo. http://www.php.net/manual/en/features.commandline.php. –

0

Penso che la risposta migliore sarebbe quella di avere apache rendere entrambe le pagine separatamente e quindi utilizzare javascript per caricare la pagina in un div. Hai il leggero rallentamento del carico ajax, ma non devi preoccuparti di questo.

C'è una cosa widget open-source che eseguirà più lingue in 1 pagina ma non riesco a ricordare quale sia il suo nome.

0

È possibile utilizzare urllib per ottenere la pagina dal server (localhost) ed eseguirla nell'ambiente giusto per php. Non carino, ma funzionerà. Potrebbe causare problemi di prestazioni se lo fai molto.

1

forse fuori tema, ma se si vuole fare questo in un modo in cui è possibile accedere ai vars e tali creati dallo script php (ad esempio array di notizie), il tuo miglior risultato sarà fare l'exec di lo script php, ma restituisce una matrice json di elementi da php come stringa, quindi json li decodifica sul lato python e fa la generazione e l'iterazione html lì.

Problemi correlati