2009-06-29 11 views
6

Ich habe ein PHP-Skript (news-generator.php), das, wenn ich es einschließe, eine Reihe von Nachrichten ergreift und sie druckt. Im Moment verwende ich Python für meine Website (CGI). Wenn ich PHP wurde mit, ich so etwas wie dies auf der „News“ Seite verwendet:Wie schließe ich ein PHP-Skript in Python ein?

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

(schnitt ich das Beispiel der Einfachheit halber nach unten.)

Gibt es eine Möglichkeit, ich Python das Skript ausführen machen könnte (news-generator.php) und gibt die Ausgabe zurück, die plattformübergreifend funktionieren würde? Auf diese Weise konnte ich dies tun:

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

"Ich vereinfachte das Beispiel der Einfachheit halber." - Für was sonst würden Sie es vereinfachen? ;) –

+0

@musicfreak: kichert? Effizienz? Schönheit? –

+1

Ich habe mit Leuten gearbeitet, die "das Beispiel vereinfacht haben", um ihre Inkompetenz zu verschleiern. Ich hoffe, das ist hier nicht der Fall. –

Antwort

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

Das einzige Problem ist, wie S.Lott erwähnt, die CGI-Umgebung zu simulieren, die PHP will. – alecwh

7

PHP ist ein Programm. Sie können jedes Programm mit subprocess ausführen.

Der schwierige Teil simuliert die gesamte CGI-Umgebung, die PHP erwartet.

+0

Guter Punkt. Hängt davon ab, welche Art von PHP du betreibst, nehme ich an. – Eli

+0

Erwartet PHP-CLI diese Art von Umgebung? –

+0

PHP CGI erwartet viel Umgebung. Das CLI scheint wesentlich weniger Umgebungseinstellungen zu erfordern. Hier ist das definitive Dokument. http://www.php.net/manual/en/features.commandline.php. –

0

Ich denke, die beste Antwort Apache würde beiden Seiten getrennt haben, machen und dann Javascript verwenden Sie diese Seite in ein div zu laden. Sie haben die leichte Verlangsamung der Ajaxlast, aber dann müssen Sie sich nicht darum kümmern.

Es gibt eine Open-Source-Widget-Sache, die mehrere Sprachen in 1 Seite ausführen wird, aber ich kann mich nicht erinnern, wie es genannt wird.

0

Sie könnten urllib verwenden, um die Seite vom Server (localhost) und führen Sie es in der richtigen Umgebung für PHP. Nicht schön, aber es wird funktionieren. Es kann zu Leistungsproblemen führen, wenn Sie es häufig tun.

1

vielleicht off Thema, aber wenn Sie dies auf eine Weise tun möchten, wo Sie auf die Vars und solche durch das PHP-Skript (z. B. Array von Nachrichten) erstellt zugreifen können, wird Ihre besten besten, die Exec zu tun das PHP-Skript, aber ein JSON-codiertes Array von Elementen aus PHP als String zurückgeben, dann json dekodieren sie auf der Python-Seite, und tun Sie Ihre HTML-Generierung und Iteration dort.

Verwandte Themen