Ausführen eines Python-Skripts in WordPress
-
-
Wennesein sehreinfaches Skriptist,würdeicheseinfachin PHP als WordPress-Plugin/Vorlage umschreiben ;-) Aberin einigen Fällen verwenden die Leuteiframes,umexterne Seiteneinzubetten.If it's a very simple script, I think I would just rewrite it in PHP as a WordPress plugin/template ;-) But in some cases people use iframes to embed external pages.
- 1
- 2013-10-27
- birgire
-
iframees direkt?:]iframe it directly? :]
- 0
- 2013-10-27
- Jesse
-
Ist dasnurein Unfall oderist Ihr Python-Code wirklichmit PHPgemischt?Is this just an accident, or is your python code really mixed with PHP?
- 0
- 2013-11-05
- fuxia
-
Ich habe die Terminal-Ablaufverfolgungeingefügt,wobei die Dateienmit dem Befehl 'more' angezeigt werden ... wirdein wenig aufgeräumt ...I pasted the terminal trace, with the files being displayed by the 'more' command... will tidy up a little...
- 0
- 2013-11-05
- Joe
-
3 Antworten
- Stimmen
-
- 2013-10-27
Sie können
popen ()
verwenden,um Lesen oder Schreibenin ein Python-Skript (diesfunktioniert auchmit jeder anderen Sprache). Wenn Sie Interaktionbenötigen (Variablen übergeben),verwenden Sieproc_open ()
.Eineinfaches Beispiel zum Drucken von Hello World! in einem WordPress-Plugin
Erstellen Sie das Plugin und registrieren Sieeinen Shortcode:
& lt ;?php # - * - Kodierung: utf-8 - * - /* Plugin Name: Pythoneingebettet */ add_shortcode ('python','embedded_python'); Funktioneingebettet_python ($ Attribute) { $ data=shortcode_atts ( [ 'file'=> 'hallo.py' ], $ Attribute ); $ handle=popen (__DIR__. '/'. $ data ['file'],'r'); $ read=''; while (!feof ($ handle)) { $ read.=fread ($ handle,2096); }} pclose ($ handle); return $ read; }}
Jetzt können Sie diesen Shortcodeim Post-Editormit
[python]
oder[pythonfile="filename.py"]
verwenden.Legen Sie die Python-Skripte,die Sie verwendenmöchten,im selben Verzeichnis wie die Plugin-Datei ab. Sie können sie auchin ein Verzeichnis stellen und den Pfadim Shortcode-Handler anpassen.
Erstellen Sienunein komplexes Python-Skript wiefolgt:
print ("Hallo Welt!")
Und dasist alles. Verwenden Sie den Shortcode underhalten Sie diefolgende Ausgabe:
You can use
popen()
to read or write to a Python script (this works with any other language too). If you need interaction (passing variables) useproc_open()
.A simple example to print Hello World! in a WordPress plugin
Create the plugin, register a shortcode:
<?php # -*- coding: utf-8 -*- /* Plugin Name: Python embedded */ add_shortcode( 'python', 'embed_python' ); function embed_python( $attributes ) { $data = shortcode_atts( [ 'file' => 'hello.py' ], $attributes ); $handle = popen( __DIR__ . '/' . $data['file'], 'r' ); $read = ''; while ( ! feof( $handle ) ) { $read .= fread( $handle, 2096 ); } pclose( $handle ); return $read; }
Now you can use that shortcode in the post editor with
[python]
or[python file="filename.py"]
.Put the Python scripts you want to use into the same directory as the plugin file. You can also put them into a directory and adjust the path in the shortcode handler.
Now create a complex Python script like this:
print("Hello World!")
And that’s all. Use the shortcode, and get this output:
-
Bei der richtigen Antwort wird weggelassen,dass dieerste Zeile des Python-Skripts,zumindestin meinem Fall,#!/Usr/bin/envpython seinmussCorrect answer omits that first line of the the python script, at least in my case, needs to be #!/usr/bin/env python
- 0
- 2014-05-19
- MikeiLL
-
@MikeiLL Das hängt vom System des Benutzers ab,deshalb habeichesbewusst weggelassen.@MikeiLL That depends on the user’s system, so I left it out deliberately.
- 1
- 2014-05-20
- fuxia
-
im Grundeein Sicherheitslochmachen.Wenn Sie zu Python weiterleiten können,können Sie auch zujedem anderen Prozess weiterleiten. Dies kann verwendet werden,um weiteretriviale Exploits zueskalieren.basically making a security hole. If you can pipe to python, you can pipe to any other process as well and this can be used to escalate any more trivial exploit.
- 1
- 2018-08-15
- Mark Kaplun
-
@ MarkKaplunja,dasist keinegute Idee.Um dies "richtig" zumachen,mussein Befehl ausgeführt und JavaScript + PHP ausgeführt werden.Diesist keinegute Möglichkeit,etwasin WordPress zuentwickeln,es sei denn,esgibt einen SEHR spezifischen Grund dafür."Ihre -wissenschaftler-Programmierer waren sobeschäftigt,ob sie konnten odernicht,dass sienicht aufhörten zu überlegen,ob sie sollten."@MarkKaplun yes, this is not a good idea. To do this "right" there will have to be command escaping going in, and JavaScript+PHP escaping going on. This is not a good way to develop anything inside WordPress, unless there is a VERY specific reason to do this. "Your -scientists- programmers were so preoccupied with whether or not they could, they didn’t stop to think if they should."
- 0
- 2020-01-20
- Brian Stinar
-
- 2016-10-06
Ich habe das Beispielskript von derersten Antwort anbefolgt,aber keine Ausgabe oder Fehlererhalten.
Ich habe diese Zeilegeändert:
$handle = popen( __DIR__ . '/' . $data['file'], 'r' );
dazu:
$handle = popen( __DIR__ . '/' . $data['file'] . ' 2>&1', 'r' );
underhielt dann die Meldung "Berechtigung verweigert".
Auf der Konsole habeich
ausgeführtchmod 777 hello.py
hat die Seite aktualisiert und alles hatperfektfunktioniert.
Dies könnte das Problem sein,das Joe obengesehen hat.Ich habenichtgenug Repräsentanten,umeinen Kommentar abzugeben,sorry.Hoffe das hilftjemandem.
I followed the example script from the first answer, but was getting no output or errors.
I changed this line:
$handle = popen( __DIR__ . '/' . $data['file'], 'r' );
to this:
$handle = popen( __DIR__ . '/' . $data['file'] . ' 2>&1', 'r' );
and then got a "permission denied" message.
On the console, I ran
chmod 777 hello.py
refreshed the page, and everything worked perfectly.
This may be the issue Joe was seeing above. I don't have enough rep to make a comment, sorry. Hope this helps someone.
-
Machen Sienicht die Erlaubnis 777. Machen Sieeseinfach ausführbar.`chmod + xfilename.py` reicht ausDo not make the permission 777. Just make it executale. `chmod +x filename.py` will do
- 0
- 2019-06-25
- Dheeraj M Pai
-
- 2014-05-19
Hieristein kleines Skript,das
proc_open
wie oben angegeben verwendet,umeine einfache Textvariable anein Python-Skript zu senden:add_shortcode( 'execute_python', 'execute_python_with_argv' ); function execute_python_with_argv( $attributes ){ $description = array ( 0 => array("pipe", "r"), // stdin 1 => array("pipe", "w"), // stdout 2 => array("pipe", "w") // stderr ); $application_system = "python "; $application_path .= plugin_dir_path( __FILE__ ); $application_name .= "hello.py"; $separator = " "; $application = $application_system.$application_path.$application_name.$separator; $argv1 = '"output to receive back from python script"'; $pipes = array(); $proc = proc_open ( $application.$argv1 , $description , $pipes ); //echo proc_get_status($proc)['pid']; if (is_resource ( $proc )) { echo "Stdout : " . stream_get_contents ( $pipes [1] ); //Reading stdout buffer fclose ( $pipes [1] ); //Closing stdout buffer fclose ( $pipes [2] ); //Closing stderr buffer $return_value = proc_close($proc); echo "<br/>command returned: $return_value<br/>"; } $application_test = glitch_player_DIR.$application_name; echo "<br/>Is ".$application_test." executable? ".is_executable($application_test)." "; echo "readable? ".is_readable($application_test)." "; echo "writable? ".is_writable($application_test)." "; } //EOF main/shortcode function
Im unteren Bereich wurdeneinige Tests hinzugefügt,umfestzustellen,ob die Python-Datei
rwx
ist. Ich denke,ein besserer Weg,um dasargv
zu senden,wäre die Verwendung vonfwrite,aberesfunktioniertenichtfürmichnach dieses Tutorial .Hierist das Python-Skript,dasich verwendet habe. Wiein den obigen Kommentarenerwähnt,kannje nach Server
#!/usr/bin/env python
erforderlich sein.#!/usr/bin/env python from sys import argv script, what_he_said = argv print "This is what you submitted: %s \n \n Isn't that amazing, man? " % what_he_said
Here's a little script that uses
proc_open
as noted above, to sent one simple text variable to a python script:add_shortcode( 'execute_python', 'execute_python_with_argv' ); function execute_python_with_argv( $attributes ){ $description = array ( 0 => array("pipe", "r"), // stdin 1 => array("pipe", "w"), // stdout 2 => array("pipe", "w") // stderr ); $application_system = "python "; $application_path .= plugin_dir_path( __FILE__ ); $application_name .= "hello.py"; $separator = " "; $application = $application_system.$application_path.$application_name.$separator; $argv1 = '"output to receive back from python script"'; $pipes = array(); $proc = proc_open ( $application.$argv1 , $description , $pipes ); //echo proc_get_status($proc)['pid']; if (is_resource ( $proc )) { echo "Stdout : " . stream_get_contents ( $pipes [1] ); //Reading stdout buffer fclose ( $pipes [1] ); //Closing stdout buffer fclose ( $pipes [2] ); //Closing stderr buffer $return_value = proc_close($proc); echo "<br/>command returned: $return_value<br/>"; } $application_test = glitch_player_DIR.$application_name; echo "<br/>Is ".$application_test." executable? ".is_executable($application_test)." "; echo "readable? ".is_readable($application_test)." "; echo "writable? ".is_writable($application_test)." "; } //EOF main/shortcode function
Added a few tests as the bottom to see if the python file is
rwx
. I think a better way to send theargv
would be using fwrite, but it wasn't working for me following this tutorial.Here is the python script I used. As noted in comments above, something like
#!/usr/bin/env python
may be necessary, depending on server.#!/usr/bin/env python from sys import argv script, what_he_said = argv print "This is what you submitted: %s \n \n Isn't that amazing, man? " % what_he_said
Ich habeeine WordPress-Installationfürein persönliches Blog undportierenach undnach all die kleinen Web-Bits,dieichim Laufe der Jahregeschrieben habe,auf Seitenim Blog.
Eine solche Seiteist http://www.projecttoomanycooks.co. uk/cgi-bin/memory/majorAnalysis.py Diesistein einfaches Python-Skript,daseine Liste von Wörtern zurückgibt. Ichmöchte dieses Verhaltenin eine WordPress-Seiteeinbetten. Könntemichjemandin die richtige Richtung weisen? dieeinfachste Art,einen Python-Spotin WordPress auszuführen?
BEARBEITEN -nach der wunderbaren Antwort unten habeich vielmehr ... aber leiderimmernochnichtganz da ...
Ich habe Python,das auf dem Server ausgeführt wird ...
undesbefindet sichim selben Verzeichnis wie das aktivierte Plugin ...
Der Python-Code ...mit demfolgenden Code ...
Das PHP: