私は個人的なブログのためにWordPressをインストールしています、そして私は何年にもわたって書いてきた小さなウェブの全てをブログのページに徐々に移植しています。
そのようなページの一つが http://www.projecttoomanycooks.co.uk/cgi-bin/memory/majorAnalysis.py これは単語のリストを返す単純なpythonスクリプトです - 私はその振る舞いを埋め込みたいですワードプレスのページ内で - ワードプレス内でpythonを簡単に実行するための簡単な方法を教えてくれる人がいるでしょうか。
編集 - 以下の素晴らしい答えに続いて、私はもっと遠くまで持っています...しかし残念ながらまだかなりそこにはありません...
私はサーバー上で実行するPythonを持っています...
projecttoomanycooks server [~/public_html/joereddington/wp-content/plugins]#./hello.py
Hello World!
そしてそれは活性化されたプラグインと同じディレクトリにあります...
以下のコードを含むPythonコード...
#!/usr/bin/python
print("Hello World!")
Php:
<?php
/**
* Plugin Name: Joe's python thing.
* Plugin URI: http://URI_Of_Page_Describing_Plugin_and_Updates
* Description: A brief description of the Plugin.
* Version: The Plugin's Version Number, e.g.: 1.0
* Author: Name Of The Plugin Author
* Author URI: http://URI_Of_The_Plugin_Author
* License: A "Slug" license name e.g. GPL2
*/
/*from http://wordpress.stackexchange.com/questions/120259/running-a-python-scri
pt-within-wordpress/120261?noredirect=1#120261 */
add_shortcode( 'python', 'embed_python' );
function embed_python( $attributes )
{
$data = shortcode_atts(
array(
'file' => 'hello.py'
),
$attributes
);
$handle = popen( __DIR__ . '/' . $data['file'], 'r');
$read = fread($handle, 2096);
pclose($handle);
return $read;
}
popen()
を使って または をPythonスクリプトに書き込むことができます(これは他の言語でも機能します)。対話(変数の受け渡し)が必要な場合は proc_open()
を使用してください。
プラグインを作成し、ショートコードを登録します。
<?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;
}
これで、ポストエディタでそのショートコードを[python]
または[python file="filename.py"]
とともに使用できます。
使用したいPythonスクリプトをプラグインファイルと同じディレクトリに置きます。ディレクトリに入れてショートコードハンドラでパスを調整することもできます。
今度はこのような複雑なPythonスクリプトを作成します。
print("Hello World!")
そしてそれだけです。ショートコードを使用して、この出力を取得します。
最初の答えからスクリプト例をたどりましたが、出力もエラーも表示されませんでした。
私はこの行を変更しました:
$handle = popen( __DIR__ . '/' . $data['file'], 'r' );
これに:
$handle = popen( __DIR__ . '/' . $data['file'] . ' 2>&1', 'r' );
そして「許可が拒否されました」というメッセージが表示されます。
コンソールで、私は走った
chmod 777 hello.py
ページを更新したところ、すべてうまくいった。
これはJoeが上で見ていた問題かもしれません。申し訳ありませんが、コメントするのに十分な担当者がいません。これが誰かに役立つことを願っています。
これは上記のようにproc_open
を使用して1つの単純なテキスト変数をpythonスクリプトに送信する小さなスクリプトです。
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
Pythonファイルがrwx
であるかどうかを確認するために、一番下にいくつかのテストを追加しました。私はargv
を送るためのより良い方法はfwriteを使うことになると思いますが、 このチュートリアルに続いて私にはうまくいきませんでした 。
これが私が使ったPythonスクリプトです。上記のコメントで述べたように、サーバによっては#!/usr/bin/env python
のようなものが必要かもしれません。
#!/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