2009-06-29 13 views
6

Tengo un script PHP (noticias-generator.php) que, cuando lo incluyo, agarra un montón de noticias y los imprime. En este momento, estoy usando Python para mi sitio web (CGI). Cuando yo estaba usando PHP, he usado algo como esto en el "News" página:¿Cómo incluyo un script PHP en Python?

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

(corté el ejemplo de simplicidad.)

¿Hay alguna manera de que pudiera hacer que Python ejecuta la secuencia de comandos (news-generator.php) y devolver la salida que funcionaría multiplataforma? De esa manera, podría hacer esto:

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

"Que simplifica el ejemplo de simplicidad." - ¿Para qué más lo simplificarías? ;) –

+0

@musicfreak: ¿risitas? ¿eficiencia? ¿belleza? –

+1

He trabajado con personas que "simplificaron el ejemplo" para ocultar su incompetencia. Espero que ese no sea el caso aquí. –

Respuesta

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

El único problema es, como menciona S.Lott, simular el entorno CGI que PHP quiere. – alecwh

7

PHP es un programa. Puede ejecutar cualquier programa con subprocess.

La parte difícil es la simulación de todo el entorno CGI que PHP espera.

+0

Buen punto. Depende del tipo de PHP que estés ejecutando, supongo. – Eli

+0

¿PHP-CLI espera este tipo de entorno? –

+0

PHP CGI espera mucho entorno. La CLI parece requerir mucha menos configuración ambiental. Aquí está el documento definitivo. http://www.php.net/manual/en/features.commandline.php. –

0

Creo que la mejor respuesta sería hacer que apache represente ambas páginas por separado y luego usar javascript para cargar esa página en un div. Tienes la ligera ralentización de la carga de ajax, pero entonces no tienes que preocuparte por ello.

No es una cosa widget de código abierto que se ejecutará en varios idiomas 1 página, pero no puedo recordar lo que se llama.

0

Usted podría utilizar urllib para obtener la página desde el servidor (localhost) y ejecutarlo en el entorno adecuado para php. No es bonito, pero funcionará. Puede causar problemas de rendimiento si lo haces mucho.

1

tal vez fuera del tema, pero si desea hacer esto de manera que pueda acceder a los vars creados por la secuencia de comandos php (por ejemplo, una serie de noticias), lo mejor será hacer el ejecutivo de el script php, pero devuelve una matriz JSON codificado de artículos de php como una cadena, a continuación, JSON a decodificar en el lado pitón, y hacer su generación html e iteración allí.

Cuestiones relacionadas