Wie lassen sich Ruby / Python-Skripte innerhalb von PHP ausführen, die Parameter übergeben und empfangen?

8

Ich muss HTML in äquivalenten Markdown-strukturierten Text verwandeln.

OBS .: Schnelle und klare Vorgehensweise mit PHP & amp; Python .

Da ich in PHP programmiere, geben einige Leute Markdownify an, um die Aufgabe zu erledigen, aber leider wird der Code nicht aktualisiert und funktioniert nicht . Bei sourceforge.net/projects/markdotify gibt es ein "HINWEIS: nicht unterstützt - möchten Sie dieses Projekt zu pflegen? Kontaktieren Sie mich! Markdownify ist ein HTML to Markdown-Konverter in PHP geschrieben. Sehen Sie es als Nachfolger von html2text.php seit es hat besseres Design, bessere Leistung und weniger Ecken. "

Nach dem, was ich entdecken konnte, habe ich nur zwei gute Möglichkeiten:

  • Python: Aaron Swartz's html2text.py

  • Ruby: Singpolymas html2markdown.rb, basierend auf Nokogiri

Also, von PHP muss ich den HTML-Code übergeben, das Ruby / Python-Skript aufrufen und die Ausgabe zurück erhalten.

(Übrigens hat ein Volk hier eine ähnliche Frage gestellt ("Wie kann man Ruby Script von PHP aus aufrufen?"), aber ohne praktische Informationen zu meinem Fall).

Nach dem Tipp des Tin Man (unten), kam ich zu diesem:

PHP-Code:

%Vor%

Python-Code:

%Vor%

Mit dem oben genannten werde ich das tun:

Der Befehl

hat 1 zurückgegeben Array (     [0] = & gt; Ressourcen-ID # 17      1 = & gt; Ressourcen-ID # 18 )

Und die Datei "error-output.txt" sagt:

Traceback (zuletzt letzter Aufruf):   Datei "html2md.py", Zeile 5, in     Drucken html2text.html2text (sys.argv 1 ) IndexError: Listenindex außerhalb des Bereichs

Irgendwelche Ideen ???

Ruby-Code ( wird noch analysiert )

%Vor%

Nur für die Aufzeichnungen habe ich versucht, PHP's einfachste "exec ()" zu verwenden, aber ich habe einige Probleme mit einigen Sonderzeichen bekommen, die sehr häufig in der HTML-Sprache vorkommen.

PHP-Code:

%Vor%

Ruby-Code:

%Vor%

Python-Code:

%Vor%

Beide funktionieren gut. Aber wenn die Zeichenfolge etwas komplizierter ist:

%Vor%

Es hat überhaupt nicht funktioniert.

Das liegt daran, dass der HTML-String seine Sonderzeichen haben muss. Ich habe es mit diesem:

%Vor%

Jetzt funktioniert es wie ich sagte hier .

Ich bin runnig: Fedora 14 Rubin 1.8.7 Python 2.7 Perl 5.12.2 PHP 5.3.4 nginx 0.8.53

    
Roger 06.01.2011, 21:20
quelle

5 Antworten

12

Lassen Sie PHP das Ruby- oder Python-Skript über proc_open öffnen und leiten Sie das Skript ein HTML in STDIN im Skript. Das Ruby / Python-Skript liest und verarbeitet die Daten und gibt sie über STDOUT zurück an das PHP-Skript und wird dann beendet. Dies ist eine gängige Methode, um Dinge über Perl, Ruby oder Python zu erledigen, und es ist schön, weil es Ihnen den Zugriff auf STDERR ermöglicht, falls etwas in Stücke übergeht und keine temporären Dateien benötigt, aber es ist ein bisschen komplexer .

Alternativ dazu können Sie die Daten von PHP in eine temporäre Datei schreiben und dann % co_de verwenden % , popen oder etwas Ähnliches, um das Ruby / Python-Skript aufzurufen um es zu öffnen und zu verarbeiten und die Ausgabe mit ihrem STDOUT zu drucken.

BEARBEITEN:

Siehe @ Jonkes Antwort für "Best Practices mit STDIN in Ruby? " Beispiele dafür, wie einfach es ist, STDIN zu lesen und mit Ruby nach STDOUT zu schreiben. " Wie liest du von stdin in Python? " hat einige gute Beispiele für diese Sprache.

Dies ist ein einfaches Beispiel, das zeigt, wie man ein Ruby-Skript aufruft, ihm eine Zeichenfolge über die STDIN-Pipe von PHP übergibt und das STDOUT des Ruby-Skripts liest:

Speichern Sie dies als "test.php":

%Vor%

Speichern Sie dies als "test.rb":

%Vor%

Wenn Sie das PHP-Skript ausführen, erhalten Sie:

%Vor%

Das PHP-Skript öffnet den Ruby-Interpreter, der das Ruby-Skript öffnet. PHP sendet dann "Hallo Welt" an sie. Ruby umschließt den empfangenen Text in Fettdruck-Tags und gibt ihn aus, der von PHP erfasst und dann ausgegeben wird. Es gibt keine temporären Dateien, nichts wird in der Befehlszeile übergeben, Sie könnten eine Menge Daten weitergeben, wenn nötig, und es wäre ziemlich schnell. Python oder Perl könnten einfach anstelle von Ruby verwendet werden.

BEARBEITEN:

Wenn Sie:

%Vor%

als Beispielcode, dann könnten Sie mit der Entwicklung einer Ruby-Lösung beginnen:

%Vor%

vorausgesetzt, Sie haben den HTML2Markdown-Code bereits heruntergeladen und haben ihn im aktuellen Verzeichnis und führen Ruby 1.9.2 aus.

    
the Tin Man 06.01.2011, 23:48
quelle
5

Lassen Sie in Python var als Befehlszeilenargument übergeben, holen Sie es aus sys.argv (die Liste der an Python übergebenen Befehlszeilenargumente), und lassen Sie dann Python die Ausgabe drucken, die dann von PHP ausgegeben wird. Beispiel:

%Vor%

PHP:

%Vor%

Die Prozedur sollte in Ruby im Prinzip identisch sein.

    
Rafe Kettler 06.01.2011 21:33
quelle
2

Verwenden Sie eine Variable im Ruby-Code und übergeben Sie sie als Argument an das Ruby-Skript aus dem PHP-Code. Lassen Sie dann das Ruby-Skript den verarbeiteten Code in stdout zurückgeben, das PHP lesen kann.

    
Daniel Walker 06.01.2011 21:32
quelle
0

Ich denke, deine Frage ist falsch. Ihr Problem ist, wie Sie von HTML zu Markdown konvertieren. Habe ich Recht?

Probieren Sie Ссылка aus. Ich denke, es könnte Ihnen helfen =)

    
Evaldo Junior 07.01.2011 14:23
quelle
0

Ein anderer sehr seltsamer Ansatz wird der sein, den ich benutzt habe.

%Vor%

Nicht empfohlen, aber das wird sicher funktionieren.

    
Akif Hazarvi 05.10.2016 08:20
quelle

Tags und Links